Replace Windows GUI with revised one from Richard Messeder.
authorrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 25 Mar 2005 19:45:35 +0000 (19:45 +0000)
committerrobertl <robertl@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Fri, 25 Mar 2005 19:45:35 +0000 (19:45 +0000)
21 files changed:
gpsbabel/win32/GPSBabelGUI.exe [new file with mode: 0644]
gpsbabel/win32/README [deleted file]
gpsbabel/win32/gpsbabelfront.dpr [deleted file]
gpsbabel/win32/gpsbabelfront.exe [deleted file]
gpsbabel/win32/gpsbabelfront_mainform.dfm [deleted file]
gpsbabel/win32/gpsbabelfront_mainform.pas [deleted file]
gpsbabel/win32/gui/AboutDialogU.ddp [new file with mode: 0644]
gpsbabel/win32/gui/AboutDialogU.dfm [new file with mode: 0644]
gpsbabel/win32/gui/AboutDialogU.pas [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.cfg [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.dof [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.dpr [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.ico [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.res [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUI.todo [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUIDialogU.ddp [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUIDialogU.dfm [new file with mode: 0644]
gpsbabel/win32/gui/GPSBabelGUIDialogU.pas [new file with mode: 0644]
gpsbabel/win32/gui/README.txt [new file with mode: 0644]
gpsbabel/win32/gui/VersionInfo.pas [new file with mode: 0644]
gpsbabel/win32/gui/filelist.txt [new file with mode: 0644]

diff --git a/gpsbabel/win32/GPSBabelGUI.exe b/gpsbabel/win32/GPSBabelGUI.exe
new file mode 100644 (file)
index 0000000..03773b1
Binary files /dev/null and b/gpsbabel/win32/GPSBabelGUI.exe differ
diff --git a/gpsbabel/win32/README b/gpsbabel/win32/README
deleted file mode 100644 (file)
index 132c2c7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-This is a Windows front-end for GPSBabel.  It was contributed and is
-maintained by Josh McKee.   It is written in Delphi.
-
-
diff --git a/gpsbabel/win32/gpsbabelfront.dpr b/gpsbabel/win32/gpsbabelfront.dpr
deleted file mode 100644 (file)
index 777008f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-program gpsbabelfront;
-
-uses
-  Forms,
-  gpsbabelfront_mainform in 'gpsbabelfront_mainform.pas' {FormGPSBabelFront};
-
-{$R *.res}
-
-begin
-  Application.Initialize;
-  Application.Title := 'GPSBabel Front End';
-  Application.CreateForm(TFormGPSBabelFront, FormGPSBabelFront);
-  Application.Run;
-end.
diff --git a/gpsbabel/win32/gpsbabelfront.exe b/gpsbabel/win32/gpsbabelfront.exe
deleted file mode 100644 (file)
index b719d19..0000000
Binary files a/gpsbabel/win32/gpsbabelfront.exe and /dev/null differ
diff --git a/gpsbabel/win32/gpsbabelfront_mainform.dfm b/gpsbabel/win32/gpsbabelfront_mainform.dfm
deleted file mode 100644 (file)
index 7721ba5..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-object FormGPSBabelFront: TFormGPSBabelFront
-  Left = 208
-  Top = 103
-  BorderStyle = bsDialog
-  Caption = 'GPSBabel GUI Frontend'
-  ClientHeight = 312
-  ClientWidth = 369
-  Color = clBtnFace
-  Font.Charset = DEFAULT_CHARSET
-  Font.Color = clWindowText
-  Font.Height = -11
-  Font.Name = 'MS Sans Serif'
-  Font.Style = []
-  OldCreateOrder = False
-  Position = poScreenCenter
-  OnCreate = FormCreate
-  DesignSize = (
-    369
-    312)
-  PixelsPerInch = 96
-  TextHeight = 13
-  object Label1: TLabel
-    Left = 8
-    Top = 292
-    Width = 250
-    Height = 13
-    Anchors = [akLeft, akBottom]
-    Caption = 'GPSBabel: http://sourceforge.net/projects/gpsbabel'
-  end
-  object Label2: TLabel
-    Left = 8
-    Top = 16
-    Width = 43
-    Height = 13
-    Caption = 'Input file:'
-  end
-  object Label3: TLabel
-    Left = 8
-    Top = 80
-    Width = 51
-    Height = 13
-    Caption = 'Output file:'
-  end
-  object Bevel1: TBevel
-    Left = -3
-    Top = 285
-    Width = 380
-    Height = 2
-    Anchors = [akLeft, akBottom]
-  end
-  object Label4: TLabel
-    Left = 16
-    Top = 104
-    Width = 35
-    Height = 13
-    Caption = 'Format:'
-  end
-  object Label5: TLabel
-    Left = 16
-    Top = 40
-    Width = 35
-    Height = 13
-    Caption = 'Format:'
-  end
-  object Label6: TLabel
-    Left = 8
-    Top = 168
-    Width = 33
-    Height = 13
-    Caption = 'Result:'
-  end
-  object comboInput: TComboBox
-    Left = 64
-    Top = 40
-    Width = 297
-    Height = 21
-    Style = csDropDownList
-    ItemHeight = 13
-    TabOrder = 2
-  end
-  object editInput: TEdit
-    Left = 64
-    Top = 16
-    Width = 273
-    Height = 21
-    TabOrder = 0
-  end
-  object editOutput: TEdit
-    Left = 64
-    Top = 80
-    Width = 273
-    Height = 21
-    TabOrder = 3
-  end
-  object comboOutput: TComboBox
-    Left = 64
-    Top = 104
-    Width = 297
-    Height = 21
-    Style = csDropDownList
-    ItemHeight = 13
-    TabOrder = 5
-  end
-  object btnProcess: TButton
-    Left = 288
-    Top = 136
-    Width = 75
-    Height = 25
-    Caption = 'Process'
-    TabOrder = 7
-    OnClick = btnProcessClick
-  end
-  object cbIgnoreShort: TCheckBox
-    Left = 64
-    Top = 136
-    Width = 169
-    Height = 17
-    Caption = 'Ignore "short" names'
-    TabOrder = 6
-  end
-  object btnInput: TButton
-    Left = 341
-    Top = 16
-    Width = 19
-    Height = 21
-    Caption = '...'
-    TabOrder = 1
-    OnClick = btnInputClick
-  end
-  object btnOutput: TButton
-    Left = 341
-    Top = 80
-    Width = 19
-    Height = 21
-    Caption = '...'
-    TabOrder = 4
-    OnClick = btnOutputClick
-  end
-  object memoStdErr: TMemo
-    Left = 64
-    Top = 168
-    Width = 297
-    Height = 113
-    Color = clBtnHighlight
-    ReadOnly = True
-    TabOrder = 8
-  end
-  object OpenDialogInput: TOpenDialog
-    Left = 248
-    Top = 192
-  end
-  object SaveDialogOutput: TSaveDialog
-    Left = 248
-    Top = 240
-  end
-end
diff --git a/gpsbabel/win32/gpsbabelfront_mainform.pas b/gpsbabel/win32/gpsbabelfront_mainform.pas
deleted file mode 100644 (file)
index 4507e12..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-{
-
-    Copyright (C) 2002 Josh M. McKee, mrsnazz@users.sourceforge.net
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
-
-}
-
-{
-    1.0.0   JMc   First release
-    1.0.1   JMc   - Switched to using AddFormat for populating the formats table
-                  - Updated formats table to include currently supported formats
-                  - Switched to using CreateProcess rather than WinExec, so that
-                    we can display data from stderr to the user.
-    1.0.2   JMc   - Added LoadFormats to call the new -^ switch, to dynamically
-                    load the supported formats from gpsbabel.exe.
-}
-
-unit gpsbabelfront_mainform;
-
-interface
-
-uses
-  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-  Dialogs, ExtCtrls, StdCtrls;
-
-type
-  TFormat = record
-    sType:string; // type to be passed to GPSBabel
-    sExt:string;  // default file extension
-    sDesc:string; // description of format
-  end;
-
-  TFormGPSBabelFront = class(TForm)
-    Label1: TLabel;
-    Label2: TLabel;
-    Label3: TLabel;
-    comboInput: TComboBox;
-    editInput: TEdit;
-    editOutput: TEdit;
-    comboOutput: TComboBox;
-    btnProcess: TButton;
-    cbIgnoreShort: TCheckBox;
-    Bevel1: TBevel;
-    btnInput: TButton;
-    btnOutput: TButton;
-    OpenDialogInput: TOpenDialog;
-    SaveDialogOutput: TSaveDialog;
-    Label4: TLabel;
-    Label5: TLabel;
-    memoStdErr: TMemo;
-    Label6: TLabel;
-    procedure FormCreate(Sender: TObject);
-    procedure btnInputClick(Sender: TObject);
-    procedure btnOutputClick(Sender: TObject);
-    procedure btnProcessClick(Sender: TObject);
-  public
-    formats:array of TFormat;
-    nFormatCount:integer;
-
-    procedure LoadFormats;
-    procedure AddFormat(sType,sExt,sDesc:string);
-
-    procedure PopulateCombos;
-    procedure PopulateDialogs;
-  end;
-
-var
-  FormGPSBabelFront: TFormGPSBabelFront;
-
-implementation
-
-{$R *.dfm}
-
-procedure TFormGPSBabelFront.AddFormat(sType,sExt,sDesc:string);
-begin
-  SetLength(formats,nFormatCount+1);
-
-  formats[nFormatCount].sType := sType;
-  formats[nFormatCount].sExt := sExt;
-  formats[nFormatCount].sDesc := sDesc;
-
-  inc(nFormatCount);
-end;
-
-procedure TFormGPSBabelFront.PopulateCombos;
-var
-  i:integer;
-begin
-  for i:=0 to nFormatCount-1 do begin
-    comboInput.items.add(formats[i].sDesc);
-    comboOutput.items.add(formats[i].sDesc);
-  end;
-end;
-
-procedure TFormGPSBabelFront.PopulateDialogs;
-var
-  i:integer;
-begin
-  OpenDialogInput.Filter := '';
-  SaveDialogOutput.Filter := '';
-  for i:=0 to nFormatCount-1 do begin
-    if (formats[i].sExt<>'') then begin
-      OpenDialogInput.Filter := OpenDialogInput.Filter + formats[i].sDesc + ' (*.' +
-        formats[i].sExt + ')|*.' + uppercase(formats[i].sExt) + '|';
-
-      SaveDialogOutput.Filter := SaveDialogOutput.Filter + formats[i].sDesc + ' (*.' +
-        formats[i].sExt + ')|*.' + uppercase(formats[i].sExt) + '|';
-    end;
-  end;
-
-  OpenDialogInput.Filter := OpenDialogInput.Filter + 'All files (*.*)|*.*';
-  SaveDialogOutput.Filter := SaveDialogOutput.Filter + 'All files (*.*)|*.*';
-end;
-
-procedure TFormGPSBabelFront.FormCreate(Sender: TObject);
-begin
-  nFormatCount := 0;
-
-  // load formats from GPSBabel.exe
-  LoadFormats;
-
-  if nFormatCount = 0 then begin
-    ShowMessage('Unable to load format list from GPSBabel.exe. Default format list is being used instead.');
-
-    // add the default formats
-    AddFormat('geo','loc','Geocaching.com .loc');
-    AddFormat('gpsman','','GPSman');
-    AddFormat('gpx','gpx','GPX XML');
-    AddFormat('magellan','','Magellan protocol');
-    AddFormat('mapsend','','Magellan Mapsend');
-    AddFormat('pcx','pcx','Garmin PCX5');
-    AddFormat('mapsource','','Garmin Mapsource');
-    AddFormat('gpsutil','','gpsutil');
-    AddFormat('tiger','','U.S. Census Bureau Tiger Mapping Service');
-    AddFormat('csv','csv','Comma seperated values');
-    AddFormat('xmap','','Delorme Topo USA4/XMap Conduit');
-    AddFormat('dna','dna','Navitrak DNA marker format');
-    AddFormat('psp','psp','MS PocketStreets 2002 Pushpin');
-    AddFormat('cetus','','Cetus for Palm/OS');
-    AddFormat('gpspilot','','GPSPilot Tracker for Palm/OS');
-    AddFormat('magnav','','Magellan NAV Companion for PalmOS');
-    AddFormat('garmin','','Garmin serial protocol');
-    AddFormat('mxf','mxf','MapTech Exchange Format');
-    AddFormat('holux','wpo','Holux (gm-100) .wpo Format');
-    AddFormat('ozi','ozi','OziExplorer Waypoint');
-    AddFormat('tpg','tpg','National Geographic Topo .tpg');
-    AddFormat('tmpro','tmpro','TopoMapPro Places File');
-  end;
-
-  // Set up the dropdown lists and open/save dialog filters using the formats
-  PopulateCombos;
-  PopulateDialogs;
-end;
-
-procedure TFormGPSBabelFront.btnInputClick(Sender: TObject);
-var
-  sExt:string;
-  i:integer;
-begin
-  if opendialoginput.Execute then begin
-    editInput.Text := opendialoginput.filename;
-    sExt := uppercase(ExtractFileExt(editInput.text));
-    for i := 0 to nFormatCount-1 do begin
-      if '.' + uppercase(formats[i].sExt) = sExt then comboInput.ItemIndex := i;
-    end;
-  end;
-end;
-
-procedure TFormGPSBabelFront.btnOutputClick(Sender: TObject);
-var
-  sExt:string;
-  i:integer;
-begin
-  if savedialogoutput.Execute then begin
-    editOutput.Text := savedialogoutput.filename;
-    sExt := uppercase(ExtractFileExt(editOutput.text));
-    for i := 0 to nFormatCount-1 do begin
-      if '.' + uppercase(formats[i].sExt) = sExt then comboOutput.ItemIndex := i;
-    end;
-  end;
-end;
-
-procedure TFormGPSBabelFront.LoadFormats;
-var
-  sIgnoreShort:string;
-  sCmd:string;
-  f:file;
-  Buffer:array[0..255] of char;
-  hRead,hWrite:THandle;
-  StartupInfo:TStartupInfo;
-  ProcessInfo:TProcessInformation;
-  saAttr:TSecurityAttributes;
-  OutSt:TMemoryStream;
-  dwRead:DWord;
-  dwExitCode:cardinal;
-  overlapped:TOverlapped;
-  slstFormats:TStringList;
-  i:integer;
-
-  procedure ExtractFormat(sFormat:string);
-  var
-    toks:array[0..2] of string;
-    i,nTok,nLen:integer;
-  begin
-    i := 1;
-    nTok := 0;
-    toks[0] := '';
-    toks[1] := '';
-    toks[2] := '';
-    nLen := length(sFormat);
-    while ((i<=nLen) and (nTok<3)) do begin
-      if sFormat[i]=#9 then begin
-        inc(nTok);
-      end else begin
-        toks[nTok] := toks[nTok] + sFormat[i];
-      end;
-      inc(i);
-    end;
-    {showmessage(toks[0]);
-    showmessage(toks[1]);
-    showmessage(toks[2]);}
-    
-    AddFormat(toks[0],toks[1],toks[2]);
-  end;
-
-begin
-  slstFormats := TStringList.Create;
-
-  sCmd := 'GPSBabel -^';
-
-  memoStdErr.lines.clear;
-
-  saAttr.nLength := sizeof(TSECURITYATTRIBUTES);
-  saAttr.bInheritHandle := true;
-  saAttr.lpSecurityDescriptor := nil;
-
-  if not CreatePipe(hRead, hWrite,@saAttr,0) then begin
-    ShowMessage('Unable to create pipe!');
-    Exit;
-  end;
-
-  AllocConsole;
-
-  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
-  StartupInfo.cb := Sizeof(StartupInfo);
-  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
-  StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;
-  StartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
-  StartupInfo.hStdOutput:= hWrite;
-  StartupInfo.hStdError := hWrite;
-
-  if not CreateProcess(nil,pchar(sCmd),nil,nil,true,CREATE_NEW_CONSOLE,nil,nil,StartupInfo,ProcessInfo) then begin
-    ShowMessage('Unable to execute GPSBabel.exe.')
-  end else begin
-    while (WaitforSingleObject(ProcessInfo.hProcess,0)) <> WAIT_OBJECT_0 do;
-
-    PeekNamedPipe(hRead,nil,0,nil,@dwRead,nil);
-
-    if dwRead>0 then begin
-      OutSt := TMemoryStream.Create;
-
-      repeat
-        if ReadFile(hRead, Buffer, 80, dwRead, nil) then begin
-          OutSt.WriteBuffer(Buffer, dwRead)
-      end;
-      until dwRead<>80;
-
-      OutSt.Seek(0,0);
-      slstFormats.LoadFromStream(OutSt);
-      for i:=0 to slstFormats.count-1 do begin
-        ExtractFormat(slstFormats[i]);
-      end;
-      OutSt.Free;
-    end else memoStdErr.lines.add('Command executed successfully.');
-  end;
-
-  CloseHandle(hRead); CloseHandle(hWrite);
-  FreeConsole;
-end;
-
-procedure TFormGPSBabelFront.btnProcessClick(Sender: TObject);
-var
-  sIgnoreShort:string;
-  sCmd:string;
-  f:file;
-  Buffer:array[0..255] of char;
-  hRead,hWrite:THandle;
-  StartupInfo:TStartupInfo;
-  ProcessInfo:TProcessInformation;
-  saAttr:TSecurityAttributes;
-  OutSt:TMemoryStream;
-  dwRead:DWord;
-  dwExitCode:cardinal;
-  overlapped:TOverlapped;
-begin
-  if (comboInput.ItemIndex)<0 then begin
-    ShowMessage('You must select the input file format.');
-    exit;
-  end;
-
-  if (comboOutput.ItemIndex)<0 then begin
-    ShowMessage('You must select the output file format.');
-    exit;
-  end;
-
-  if cbIgnoreShort.checked then sIgnoreShort := '-s' else sIgnoreShort := '';
-
-  // The output file must exist, or else ExtractShortPathName will not function
-  if not fileexists(editoutput.text) then begin
-    system.assign(f,editoutput.text);
-    system.rewrite(f);
-    system.close(f);
-  end;
-
-  // Construct the command line to execute gpsbabel.exe. ExtractShortPathName
-  // is used to reduce any "long" file/directory names in the paths down to
-  // 8.3 dos format names (this removes spaces, etc).
-  sCmd := 'GPSBabel '+sIgnoreShort+' -i '+formats[comboInput.itemindex].sType+' -f '+
-    ExtractShortPathName(editInput.text)+' -o '+formats[comboOutput.itemindex].sType+' -F '+
-    ExtractShortPathName(editOutput.text);
-
-  memoStdErr.lines.clear;
-
-  saAttr.nLength := sizeof(TSECURITYATTRIBUTES);
-  saAttr.bInheritHandle := true;
-  saAttr.lpSecurityDescriptor := nil;
-
-  if not CreatePipe(hRead, hWrite,@saAttr,0) then begin
-    ShowMessage('Unable to create pipe!');
-    Exit;
-  end;
-
-  AllocConsole;
-
-  FillChar(StartupInfo,Sizeof(StartupInfo),#0);
-  StartupInfo.cb := Sizeof(StartupInfo);
-  StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
-  StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;
-  StartupInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE);
-  StartupInfo.hStdOutput:= hWrite;
-  StartupInfo.hStdError := hWrite;
-
-  if not CreateProcess(nil,pchar(sCmd),nil,nil,true,CREATE_NEW_CONSOLE,nil,nil,StartupInfo,ProcessInfo) then begin
-    ShowMessage('Unable to execute GPSBabel.exe.')
-  end else begin
-    while (WaitforSingleObject(ProcessInfo.hProcess,0)) <> WAIT_OBJECT_0 do;
-
-    PeekNamedPipe(hRead,nil,0,nil,@dwRead,nil);
-
-    if dwRead>0 then begin
-      OutSt := TMemoryStream.Create;
-
-      repeat
-        if ReadFile(hRead, Buffer, 80, dwRead, nil) then begin
-          OutSt.WriteBuffer(Buffer, dwRead)
-      end;
-      until dwRead<>80;
-
-      OutSt.Seek(0,0);
-      memoStdErr.lines.LoadFromStream(OutSt);
-      OutSt.Free;
-    end else memoStdErr.lines.add('Command executed successfully.');
-  end;
-
-  CloseHandle(hRead); CloseHandle(hWrite);
-  FreeConsole;
-end;
-
-end.
-
-
diff --git a/gpsbabel/win32/gui/AboutDialogU.ddp b/gpsbabel/win32/gui/AboutDialogU.ddp
new file mode 100644 (file)
index 0000000..4370276
Binary files /dev/null and b/gpsbabel/win32/gui/AboutDialogU.ddp differ
diff --git a/gpsbabel/win32/gui/AboutDialogU.dfm b/gpsbabel/win32/gui/AboutDialogU.dfm
new file mode 100644 (file)
index 0000000..8c0b177
--- /dev/null
@@ -0,0 +1,1151 @@
+object AboutBox: TAboutBox\r
+  Left = 713\r
+  Top = 118\r
+  BorderIcons = []\r
+  BorderStyle = bsNone\r
+  BorderWidth = 3\r
+  ClientHeight = 215\r
+  ClientWidth = 316\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  OldCreateOrder = True\r
+  Position = poScreenCenter\r
+  Visible = True\r
+  OnCreate = FormCreate\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object pnlOuter: TPanel\r
+    Left = 0\r
+    Top = 0\r
+    Width = 316\r
+    Height = 216\r
+    BevelInner = bvLowered\r
+    BevelWidth = 4\r
+    Caption = 'pnlOuter'\r
+    TabOrder = 1\r
+  end\r
+  object pnlInner: TPanel\r
+    Left = 27\r
+    Top = 27\r
+    Width = 262\r
+    Height = 162\r
+    BevelInner = bvRaised\r
+    BevelOuter = bvLowered\r
+    BevelWidth = 2\r
+    ParentColor = True\r
+    TabOrder = 0\r
+    object lblVersion: TLabel\r
+      Left = 121\r
+      Top = 80\r
+      Width = 136\r
+      Height = 13\r
+      Alignment = taCenter\r
+      AutoSize = False\r
+      Caption = 'Version '\r
+      IsControl = True\r
+    end\r
+    object lblCopyright: TLabel\r
+      Left = 5\r
+      Top = 124\r
+      Width = 252\r
+      Height = 13\r
+      Alignment = taCenter\r
+      AutoSize = False\r
+      Caption = 'Copyright'\r
+      IsControl = True\r
+    end\r
+    object lblLicense: TLabel\r
+      Left = 5\r
+      Top = 137\r
+      Width = 252\r
+      Height = 13\r
+      Alignment = taCenter\r
+      AutoSize = False\r
+      Caption = 'License'\r
+      Layout = tlCenter\r
+    end\r
+    object lblProductName: TLabel\r
+      Left = 121\r
+      Top = 38\r
+      Width = 136\r
+      Height = 19\r
+      Alignment = taCenter\r
+      AutoSize = False\r
+      Caption = 'GPSBabelGUI'\r
+      Font.Charset = ANSI_CHARSET\r
+      Font.Color = clWindowText\r
+      Font.Height = -15\r
+      Font.Name = 'Times New Roman'\r
+      Font.Style = [fsBold, fsItalic]\r
+      ParentFont = False\r
+    end\r
+    object ProgramIcon: TImage\r
+      Left = 11\r
+      Top = 10\r
+      Width = 110\r
+      Height = 110\r
+      Picture.Data = {\r
+        07544269746D6170C6820000424DC6820000000000003604000028000000B400\r
+        0000B40000000100080000000000907E0000232E0000232E0000000100000000\r
+        0000B3D6E000ADD5DE00A7D4E000ADCEDE00A5CEDE009FCCE000ADCCD500A6CD\r
+        D500A4C8DC009DC6DB00A5C6D60099CCCC00A5C5CE009CC4D6009DC3CE009AC0\r
+        D4009BC5C600A9C3C40094C5C6009CBECE0094BDCE00A3BFC50094C5BD008FC2\r
+        C2009CBDC500A7BEBD0093BDC4009CBDBE0095BDBD009AB8C4008DBEBD0094B6\r
+        C6009DBAB6008CB5C50095BAB6009BB5BC0094B5BD008DB5BE00A3B6B5009CB5\r
+        B50093B5B50079AEC9008BB5B50093B0BB009CB4AF0084ACC60084B4B50083AE\r
+        BC0094AEB50094B2AD008CACBD008CB2AE008CADB50099AEAD0085ACB50094AD\r
+        AD0084ADAD008CACAD007BADAD0092ACA60079A4BC008DACA60083A6B50085AA\r
+        A7008AA6AC0092A7A4007BA3B40084A4AE007CA5AD008CA5A50084A5A60073A5\r
+        A5007BA3A6008DA39C0085A49D00799DAD008A9F9D00829EA3007B9CA500849D\r
+        9C008B9E96007B9D9B007499A5006D9D9C00859B94007E9C95007B979C008398\r
+        94006699990073959D00739596007B9494006B939000738E920070928C00738C\r
+        8C006B8C8D00628C8D005A8B8C006C8985006B848400628483005A8382005384\r
+        84005B7C7C00517B7B004A7B7A0051757300427373004A7271003D707000436B\r
+        69003B6A6B00336666003A63630029585A002558580029555300215052001C4F\r
+        4F001F4C4B00104A4A001949480011424100083A3A0000333300000000000000\r
+        000000ECFD0020002200C22DF80070F1FC007294F8005894F800080200001A02\r
+        000018A51A00080000000E0000000C0000000000000001350000100000000200\r
+        00003477120008771200000000002E4502000100000064AAFF00000000004300\r
+        00009E7512002000000040000000030000000000000020000800000000002000\r
+        220000ECFD000000000043000000A07512000000000000000000200000000000\r
+        0000A803130010A51A0000E0FD0000E0FD00E0771200A79DFB007894F800FFFF\r
+        FF00F07712001A02000008000000F0771200C22DF80070F1FC005696F8002E96\r
+        F80000ECFD000000000001800000000000000000000000000000000000000200\r
+        000063003A005C00740065006D0070005C0073006800690070002E0067006900\r
+        66000000000000000000000000007774E80090020000E8751200F07512000800\r
+        00000E000000407D120020D6FF000A0000000000000000000000000000000000\r
+        0000000000000000000000000000000000000001000000000000407D12009720\r
+        650090020000000000000000000001000000A544620090020000000000000100\r
+        00001E456200407D1200000000000100000006734200407D1200407D120020D6\r
+        FF00000100000A000000D0CF1100A1B11A000067610054C1CE008553000000A1\r
+        F9000000000000000000C029F80000010000D80A600017000000A87800006C76\r
+        12000B0B0B1010102A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A3F3F3F3F462A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A1E1E1E1E1212120B0B0B0B0B0B0B10101038383838\r
+        3838383838333338383838383838383838383833333838383838383838383838\r
+        3838333338383838383838383838383833333838383838383838333338383838\r
+        3838383838383838383833333838383838383838383838383333383838383838\r
+        3838383838383833333838383838383838383838383333383838383838383833\r
+        3338383838383838383838383833333838383838383838383838383333332A2A\r
+        2A1E1E1E1212120B0B0B0B0B0B10101C3F3F3F2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A\r
+        2A2A2A2A2A2A2A2A2A2A2A2A2A3F3F3F3F3F33332A2A1C1C1212120B0B0B0B0B\r
+        0B1212123F3F3F38383838383333383838383838383838383838333338383838\r
+        3838383838383833383838383838383838383838333338383838383838383838\r
+        3838333338383838383838383838383838383333383838383838383838383838\r
+        3333383838383838383838383838383333383838383838383838383838333338\r
+        3838383838383833333838383838383838383838383333383838383838383838\r
+        384646463F3F3F333333221C1C12120B0B0B0B0B0B0B1010101C1E3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F464646463F3F3F3933281C\r
+        1C1212120B0B0B0B0B0B12121C282A3F46464646463F3F3F3F3F3F3F4646463F\r
+        3F3F3F3F3F3F3F3F46464646463F3F3F3F3F3F3F3F3F4646463F3F3F3F3F3F3F\r
+        3F3F46464646463F3F46463F3F3F3F3F3F3F3F3F3F4646464646463F3F3F3F3F\r
+        3F3F4646463F3F3F3F3F3F3F3F3F46464646463F3F3F3F3F3F3F3F3F463F4646\r
+        463F3F3F3F3F3F3F3F3F46464646463F3F3F3F3F3F3F3F3F4646464646463F3F\r
+        3F3F3F3F3F3F3F46464A4A4A4A3D3D3D333328281C1212120B0B0B0B0B101010\r
+        1C282A3838383838333338383838383838383333383838383838383838383838\r
+        3333383338383838383838383333383838383838383838383333383338383333\r
+        3838383838333338383838383838333338383838383838383333383838383838\r
+        3838383838383333383838383838383838383838333338383838383838383838\r
+        38383333383838383838383838383838383333383838383838383838384A4A3D\r
+        3D31313122221C1C1C12120B0B0B0B0B0B1010101C222A2A38613F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F1B1B393F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        38383838383F3F3F3F3F3F3F3F3F3F3F3F39313120202019191919101010100B\r
+        0B0B0B0B0B10101C31313D3D3D31313D3D3F31313D3D3D31313D3D3F3F3F3F3F\r
+        3F3F3F3F46464646463F3F3F3F3F3F3F3F3F4646463F3F3F3F3F3F3F3F3F4646\r
+        463F3F33383838383338383846463F3F3F4646464646463F3F3F3F3F3F3F4646\r
+        463F3F3F3F3F3F3F3F3F46464646463F3F3F3F3F3F3F3F3F463F4646463F3F3F\r
+        3F3F3F3F3F3F46464646463F3F3F3F3F3F3F3F3F3F3F3F3F3F4A3F3F3F3F3F3F\r
+        3F27272727272C2C2C2C2C2C201B1B1B101010100B0B0B0B0B12121211192020\r
+        20202020202C1119202020202020201920352C1919192031313D3D3D31313D3D\r
+        191B1B1B38383338383838333838381B1B1B1B0C0C1B1B1B1B1B1B1B1B1B1B1B\r
+        0C0C0C0C00003838383833333838383838383838333338383838383838383838\r
+        3838333338383838383838383838383833333838383838383838383838383333\r
+        38383838383838383F3F3F3F3F3931313D3D31315E3B2C2C2C3B494945454545\r
+        313128281C1212120B0B0B0B0B0B121219191920352C19192C3F19191920352C\r
+        19192C31313D3D3D31313D3D1920202006000600000C0C0C1B1B1B1B1B1B1B1B\r
+        1B1B1B0C0C0C0C03060C0C0C0C0C0C0C0C0C0C0C06060606061506000600003F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F\r
+        3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F38383838\r
+        3831202020202020654F4F4F4F55555555554F464639392A1C1C1C120B0B0B0B\r
+        0B1010101C281E100C1920202020202020202020202019111920202020202020\r
+        1919060006000006150603060C0C0C0C0C0C0C0C0C0C0C060606060303030306\r
+        030303030000110611060600060011061106153F3F3F3F3F3F3F3F3F46464646\r
+        463F3F3F3F3F3F3F3F3F4646464646463F3F3F3F3F3F3F3F3F46464646463F3F\r
+        3F3F3F3F3F3F3F46464631313D3D31312020202020202C19192C3B415555555B\r
+        5B5B5B5B5B51514D4D3F392A2A1C1C120B0B0B0B0B1010101C22100C07191920\r
+        352C19191920352C19191919191920352C19192C2C1911061106150003030003\r
+        0606060606060606060606030306060303030303030006110600060000201106\r
+        1106153131313D3D3D31313D3D3131313F3F31313D3D3D31313D3D3131313F3F\r
+        3131313D3D3D31313D3D3131313F3F31313D3D3D31313D3D3131313F3F312020\r
+        202020202C19192C3B4155555563685B5B5B5B5B5B5B5B5B5B51514D4646392A\r
+        2A1C12120B0B0B0B0B10101C1C2210101019191920352C19191920352C191919\r
+        1920352C19191920352C19191906000600000003030303030303030303030303\r
+        030303060006030300060C191106110615191920203131201119202020202020\r
+        2020202031312019202020202020202020203131201119202020202020202020\r
+        2031312019202020202020202020203131202C19192C3B415B5B5B5B5B5B5B5B\r
+        5B5D5D5D5D5B5B5B5B5B5B5B5B5B51514646382A2A1E17120B0B0B0B0B121212\r
+        1C222828283D45455B656550505049495054545454545050505045352C2C4149\r
+        491106110615060603030003060603030303000603030011060C0600002C452C\r
+        19191920352C191941413B3B19191920352C19192C3B4141413B3B191920352C\r
+        19192C3B4141413B3B19191920352C19192C3B4141413B3B191920352C19192C\r
+        3B4141413B3B4F5B5B5B5D5D5D5D5D5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B\r
+        5B5B51514646382A2A1E12120B0B0B0B0B0B12121C2833333D454A4A4F4F4F50\r
+        5050505050505454545450505050494141414950505050504920110C06000006\r
+        150C06000600000C0600002C2C2C455B4D4D4D4D4D4D4D4D4E4E4E4E4E4E5959\r
+        4F3B3B4A55554F4F5A60606064646464645F5F5F4F3737454F4F454F5B5B4519\r
+        19223F4F3B222222394F4F493B3B494F412C3B4F5B5B5B5B5B5B5F5F5F5B5B5B\r
+        5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B51514646382A2A1C1C12\r
+        0B0B0B0B0B1010101C28333D3D45494950505050505050505050545454545450\r
+        50505050505050505050505049412C2C455B201135201106110615412C2C455B\r
+        5B5B5B5B5B5B5B5B5B5B5B5B5B5D5D5D5D5D5D5D5D5D5D5F6364646464646565\r
+        65656464645F5F5F5F55555D5D5D5A5A5A56463B3B4D565656564D4D565D5D5D\r
+        5B5B5B5B4F4F5B5D5D5D5D5F5F5F5D5D5D5B5B5D5D5D5D5D5D5D5D5D5D5D5D5D\r
+        5B5B5B5B5B5B5B5B5B5B5B51514638332A1E17120B0B0B0B0B1010101C223333\r
+        3D454C4C50505050505054545450505050505050505054545454545454545450\r
+        505054505050412C49412C2C2C2C455B5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F63\r
+        636364646464646464646465656565656564646464646464635F5F5F5F5F5F5F\r
+        5F5A5A5A5A565656565A5D5D5D5D5D5D5D5D5D5F5F5F5F5D5D5D5D5D5D5D5D5D\r
+        5D5D5D5D5D5D5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5D5D5D5D5D5D5D5B5B5B51\r
+        514638332A1E17120B0B0B0B0B10101C1C2233333D45454C4C4C545454545454\r
+        5454545454545454545454545454545454545454545450505054545454545454\r
+        50505B5B5D5D5D5D5D5D5F5F5F5F5F5F5F5F5F5F636464646464646464656565\r
+        6565646464646464646464635F5F5F5F5F5D5B5B5B5B5B5B5A5A5A5D5D5D5D5D\r
+        5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5F5F5F5F5F5D\r
+        5D5D5D5D5B5B5B5B5B5B565656564D4D4D4D46393934342A1C1C12120B0B0B0B\r
+        0B1212121C2233333D3D49495454545454545454545454545454545454545454\r
+        5454545454505050505050505054545457575757575B5D5F5F5F5F5F5F5F5F5F\r
+        5F5F5F5F5F5F5F5F63646464656565646464646464646464646464646464645F\r
+        5F5D5D5D5D5B5B5B5B5B5B5B5D5D5D5D5D5D5D5D5B5B5B5B5B5B5D5D5D5D5D5D\r
+        5D5D5D5D5D5D5D5D5D5D5D5B51515D5D5D5D5D5B55555B554A3D454530302318\r
+        181818181818180C0C0C1C1C1010100B0B0B0B0B0B1212121C22333345454A4A\r
+        5454545454545454545454545454545454545454545454545454545454545454\r
+        54545457575757575B5B5D5F5F5F5F5F5F5F5F5F5F6363636363636363646464\r
+        646464646464646464646464646464646464635F5F5D5D5D5D5D5D5F5F5F5D5D\r
+        5D5D5D5A5A5A5A5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D564D\r
+        4D4D554F4F4F4F454A4A4A452820201D0E15150C0C0C0C0C0C0C0C0C0C102222\r
+        1C1212120B0B0B0B0B1010101C1C33333D454A4A545454545454545454545454\r
+        54545454545454545454545454545B575757505050505757575757575D5D5D5F\r
+        5F5F5F5F5F5F5F5F636363646464646464646464646464646464646464646464\r
+        64646464645F5F5F5F5F5D5D5D5D5F5F5F5F5A5A5A5D5D5D5D5D5F5F5F5F5F5F\r
+        5F5B5B5B5B5F5F5D5D5D5B5B5B5B55554C4039394545454545454545454A4A37\r
+        23282824181119202015151520201515151C22221C1C12120B0B0B0B0B0B1212\r
+        1C1C33333D3D4A4F4F4F57575757575754545454545454545454545454545454\r
+        545B5B57575454545454545454545B5B5F6363635F5F5F636363636363646464\r
+        6464646464646464646464646464646464646464646464645F5F5F5F5F5F5D5D\r
+        5D5F5F5F5D5D5D5D5F5F5F5F5F5F5F5F5F5F5F5D5B5B5B5B5B5B5B554F4F4F4C\r
+        4C393939303030373B414141454545454545452824343E342719273937202020\r
+        20201B1B1B2222221C1C12120B0B0B0B0B0B12121C1C28333939454A4A4F5757\r
+        57575757575757575757575757575454545454545B5B5B4F5757575757575B5B\r
+        5B5B5F5F5F5F5F5F636363646464646464646464646464646464646464646464\r
+        646464646464646464645F5F5F5D5D5D5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F\r
+        5F5F5F5F5B5B5B5555564E4E4E4E45453B3B3B3B352727272731313D3D454545\r
+        454545453740391B1B2F3E34271928453B262626261B1B1B2222221C1C101010\r
+        0B0B0B0B0B1010101C1C2833333945454C4C4F54545454545454545457575757\r
+        57575754545454545B5B574F54545454545B5B5B5B5F5F59525252595D636464\r
+        64646464646464646565656565656464646464646464646464646464635F5F5F\r
+        5F5F5F5F5F5F5F5F5F5F5F5F5F5D5D5D5D5D5D5B5B5B5B5B4F4F454A4A3E3E3E\r
+        3E343535353541372727272727373D3D3D3D3D3D3D454537372828281D2F2F2B\r
+        1B1B2737372626261B1B1B282828281C1C1010100B0B0B0B0B1010101C1C2828\r
+        37373D45454C4C4C4C4C4C4F4F4F4F4F4F57575757575757575757575B5B5454\r
+        545454545B5B5B5952525242424242525A646464646464646464646464646464\r
+        6464646464646464646464636363636363636363635F5F5F5F5F5F5F5F5F5F5F\r
+        5D5A5B5B5B5B5B4F4F4F4F4F45454545402F3E3E3E24273B3B3B3B2727272727\r
+        3737454545453B3B3B3B3030301A1A34342F2F2323232327262626261B1B3028\r
+        2828281C1C1010100B0B0B0B0B0B12121C1C282839394545454549494949494C\r
+        4C4C4C4C4C4F4F57575757575757575B5B5B5457575757575B594B3C3C3C3C4B\r
+        5D5D52595D646464646464646464646464646464646464646464646464646464\r
+        64646464646363635F5F5F5F60606060605D5D5D5B515151464545454A4A4A4A\r
+        4F4F4F45342F2F3E3418233B3B3728283527273745454545453B3B3B3B3B2828\r
+        341F1F3232322B2020202026262C2C2C2C3131313128281C1C1010100B0B0B0B\r
+        0B0B12121C1C282837373D45454549494949494949494949494F4F4F57575757\r
+        5757575B5B575757575B4E4B4B4B3C3C42424B5A63635F5F5F5F636363646464\r
+        646464646464646464646464645F6364646464646464635F5F5F5F5F5F5F5F60\r
+        60605D5D564F4F4F45454545454545454A4A4A4F4F4F4F392F2F2F3E30151B37\r
+        302327272727313B3B3B3B3B3B373737373728283424181F2D2D282020202626\r
+        2C2C2C2C373737373728281C1C1C10100B0B0B0B0B0B10101C1C282837374141\r
+        4141494945454545494949494949494F4F4F57575757575B5B4F4F575B4E3C29\r
+        293C3C4B52595D5F63636363635F5F5F5F5F6363636464646464646464646464\r
+        645D5D6464646464605F5F5F5F636363635F5F5B5B554C453B3B4A4A4A45454F\r
+        4F4A4A4A4A4F4F4F4F4F45342F2F3E4334181828232323232330373737373737\r
+        373737373730301A1A1A1A212D322326262626262C2C2C2C282828282828281C\r
+        1C12120B0B0B0B0B0B0B10101C1C222231313B3B414141414141414545454545\r
+        454545454C4F4F4F4F4F4F5B5B57574E3C29293C3C3C3C525A5F636363646464\r
+        6363636363635F5F5F5F5F636364646464646464645D5D646464646464646060\r
+        5D5D5A564D4D4D4545453B373D4A4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F3D34\r
+        2D2F3E3E3931241D1D27272727373737373737373737373730302B1A0E0E1F2D\r
+        2F2B1B262626262C272727282828282828281B1B1B12120B0B0B0B0B0B0B1010\r
+        1C1C222231313B414141414141414141414145454545454C4C4C4C4C4C4F5B5B\r
+        5B5B563C3C3C4B595952595D5F636363636363636363636363636363635F5F5F\r
+        5F636363636363635F5F5F646464635F5F5F55392434343425303B3737373737\r
+        454F4F4F4F4A4A4A4A45454F4F4F4F4F4F4539322D3E3E4037371C0E1B272727\r
+        273737373737373737372727272424241A0E142D3E2319262626262626262C2C\r
+        2C37373727271B1B1B12120B0B0B0B0B0B0B10101C1C22282837373B41414141\r
+        414141414145454545454C4C4C4C4C4C4C4F5B55555D5D59595D5D5F5F5F5F64\r
+        64646464636363636364646464636364646464636363636360606060605B5B5A\r
+        5A5A514D4D4D3B15030E212121373B3B3B3B3B4545454545454545454545454D\r
+        4D4D4D4D4545393E3E3E43373737241823232323313737373737373737272727\r
+        23243434240E143C321B1B262727272727273137373737272020201C1C10100B\r
+        0B0B0B0B0B0B10101C1C22282837373B3B4141414141414141454545454C4C4C\r
+        4F4F4F4F4F4F5B5B5B5F5F5F6363635F5F5D5B5D606063636363636464646464\r
+        646464636363636363635F5F5F5D5D5D5D5643434B4D45454545350C03081F25\r
+        34393B3B3B3B454545454545454545454545454D4D4D4D454545342F3E3E403B\r
+        3B302B28282828283737373737373737372727231D2534341D0D213C2B191926\r
+        2C2C2020273737373737272020201C1C1010100B0B0B0B0B0B0B10101C1C2228\r
+        31313B3B4145454545454545454545454F4F4F4F4F4F4F45454F5B5F5F5F5F5F\r
+        5F5D5D564D404040464D4D56565B5D5D5D5B5B5B5B5B5B5B5656565B5B5B5B5B\r
+        55554D4D4D4D3E3E3E4645454545310C0303133239393B3B3B45454545454545\r
+        454545454545454D4D4D4D454545362D3E434039342525282828282837374545\r
+        372C373727271B18181A25250A092D3E2323232C2C2626273737373737272727\r
+        27271C1C1010100B0B0B0B0B0B0B1010101C222831313B3B4145454545454545\r
+        4545454A4A4A4A4A4A4545454A5D5D5D5D5B5B5B5B4F45393030303025303737\r
+        37414545453B393939394046464646564D454545454539394646424242464545\r
+        4545350C0303031834393939454545454546464646463D3D454545454D4D4646\r
+        4545362F2F43342B212128282828373737374C4C353535352727180E0E25250E\r
+        04143C341920202020202037373737372626262727221C1C1010100B0B0B0B0B\r
+        0B0B1010101C222831313B3B414545454141414141454A4A45454F4F45454545\r
+        4F5D5D5D5D5D564F453730303037372525303737373B3B3B3B3B454545454545\r
+        4545454E453737454545393946442F3E464545454545370C0303030318304040\r
+        464646464646464645453B45454545464646454545403E2F3636321F1F343737\r
+        28283939373746403030302727230E0D1F34340D08213C2B1927272727272737\r
+        373737272727272722221C1C1010100B0B0B0B0B0B0B1010101C222831313B41\r
+        41414141414141414C4C45454C4C454545453B45565D5D5D5B4D373737373030\r
+        30303025253939454545454545454545454545454545454D453B3B4A4A4A3939\r
+        4D442F3E4D4D49494949370C01040101061830404D4D4D4D4D4D4D453B3B3B45\r
+        4545454545454545393936323232212121343728283737393939434337372727\r
+        271808081F341F070D2D3E272727272727373737372C2626262C2C2323231C1C\r
+        1010100B0B0B0B0B0B0B10101C1C222831313B3B414141414141454545454545\r
+        4A454545454543424B4E403940463B3535353537373739393945454545454539\r
+        39393941414141414141454545454545453939433E3E3E46464F4F45454C370C\r
+        010401010A18243040404D4D4D4D453B3B3B4545454545454545453434323232\r
+        3232212134393024303B3B3939393737373727271B0E0408242B0F030F293E27\r
+        2727272727373737372626262C2C232322221B1B1010100B0B0B0B0B0B0B1010\r
+        1C1C282831313B3B41414141414C4A4A4A45454545454D4D4B422F2F39392B28\r
+        3745454537374545453939363639393930303030373741414141414141414141\r
+        41393945453434362D2D434A454D4D4A4A4A3B15030303080D18182424344046\r
+        46393030394545454545453934342B2B21212525252525253437271A25404039\r
+        37373737372727271808040D32320A08143C3427272727273039393527272727\r
+        27271B1B281B1B1B1B10100B0B0B0B0B0B0B10101C1C222831313B4141414145\r
+        454545454545454D4D4D4D443E323437373737373745454D4545454539302525\r
+        252537373737373741414141414141414141414141373745331C2B2F293C4B46\r
+        39394F4F4F49411B0303080D0D1D242424243636251F1F1F343443393939321F\r
+        1F1F1F1F1F25252525252532343023233436363636393B3B2C2727230E04040F\r
+        211F0A0A2D2F30262626273739393527262626151B1B2323231B1B1B1010100B\r
+        0B0B0B0B0B0B1010101C1C282837373B3B4145454545454545454B4B56564039\r
+        39393D3D3D40404040373745453B3737371D1D21212130303737414141414141\r
+        4141414141414141413737403424323C3C423E34343434464F4C412706060D0D\r
+        14212121212525130D0F141F2532323232321F1F1F1F1F1F1F2B2B2B2B323232\r
+        30302323393934252532404027272718040408131F1F13142D34272727273740\r
+        403527262626261515232323231B1B1B1010100B0B0B0B0B0B0B1010101C1C28\r
+        282837373B454C4C45454646464444445B5B4537414145393939373030303030\r
+        3939353535180E2121213037373B414141414141414141414141414137373734\r
+        34403E29423E212121212134464639280E0A0A0E1A1F1F1F1F1F0A03080D0D1F\r
+        32321F1F25251F1F1F1F2525252525323232323234301D1D4040372824242121\r
+        2B2B2B0C0303080E24342D292D302626263740403526262626262C2323232320\r
+        20201B1B1010100B0B0B0B0B0B0B1010101C1C1C28282839454F4F46464B4242\r
+        4234344A5B4F4539393939302424303030303030303D3D3D3D1D0A142525303B\r
+        3B3B3B414141414141414141414141413739343232432F2D3E32131F32212121\r
+        34433424180A0D1A1A1A1A1A1A0A010103030C1F251D1D1D251F1F1F1F1F1F2B\r
+        2B2B2B343421213434281818343939373727130F213632140D04040D32432F2D\r
+        2F3019233745453526262626262C2723232323232323231B1010100B0B0B0B0B\r
+        0B0B1010101C1C1C1C2828454D4D4D4343433636333337454545373737372828\r
+        1C2430303030303030304545391D0A0D1F252537414141414141454545414141\r
+        414141413936323236362D2D3E1F0E252525252525343425180E1F1F1F1F1F1F\r
+        080101010103131F1313131F1F14141F1F1F2B34342B2B323232323230241D1D\r
+        3437373737371B152436362D140909142F34212D34231B374645352626262626\r
+        2C271B232827202020201B1B1010100B0B0B0B0B0B0B1010101C1C1C28284046\r
+        4843343434343737282828282828282828282828283428282323282828303939\r
+        301D0E040A1F25343B3B3B3B3B3B45454541414141413934343221323E3E2D42\r
+        3E0E08252525252525253434281A25251A21210801010101010E1F0E0A131313\r
+        1313131F1F1F2B2B2B32323232323232342418182439393737272727271D1D21\r
+        140F1F2F342B2F3E2B1B2745452C272727272727271B1B2828272727271B1B1B\r
+        1010100B0B0B0B0B0B0B1010101C1C2834343E3E252428283737373724242427\r
+        272727272727272730343423232323303030242434280E02020A1325343B3B3B\r
+        3B3B3B3B3B3B3B3B393934323232323236362D42340A0A252525252525252546\r
+        46282525251F0902010101010714140A0A131313131313131F1F2B2B2B2B3232\r
+        323232323928180E1830303030272731280708130A0414322B343E3218183745\r
+        3527272727272727271B283527272727271B1B101010100B0B0B0B0B0B0B1010\r
+        101A1A2A2A1A1A2424243030303030301B1B282828282828282828282834342B\r
+        2B30303030242424393918040404040D1D2B3939393939393939303434342532\r
+        32323232362F2F422B030834342525252525344F4F392424240D010101010101\r
+        0F1408040D0D0D08080D0D131F2424242432323232323232392B0E0E0E232837\r
+        2C2727301801040D0D0D0D0D0F3E3E242424373727272727272727271B243030\r
+        27272727271B1B101010100B0B0B0B0B0B0B1010101A1A252512182828282828\r
+        282828281B1D2B28282828282828282839393232322B2B242424242437453007\r
+        02020208080D141F1F2B3232323232323225323232323232362F2F3E18010A34\r
+        342525252525404F4F4F2A1F0D0101020202020D140D040408080803030A0A13\r
+        1F2424242424243232323232391D0E0E0A0A28372C2C37280A03030414322815\r
+        0D2534342424302626272727272727182430302727272727271B1B1B1010100B\r
+        0B0B0B0B0B0B101010101C1C1C1C1C3030282828282727271D1D2B2B27272727\r
+        2730303030343232322B242424243030303B3B18020404040404080D0D141F21\r
+        212121252525323232323232362F3E3E0C000D343425252525344A4A4A4F380E\r
+        01010101010108140D0404090908010104040A1D242424242424243232323232\r
+        2B180F0F03031D283535351803030309142B3B30141F34391D24403427272727\r
+        27271D24343737373737372727271B1B1010100B0B0B0B0B0B0B101010101C1C\r
+        1C1C282828282727272727271B1A303027272727303030303939252525253030\r
+        303037373737372B0A0202020202020808080F141F1F1F252532323232323232\r
+        362F42400C000D323232252534464F4F4F4F460E010101010108140F04040909\r
+        0902020202020A1D1F1F1F1F1F1F25323232323224180D030007070C3045280C\r
+        03030D21232339433E3E464023233E3E3E302727271B1B303027273030303027\r
+        271B1B1B1B10100B0B0B0B0B0B0B101010101C1C1C2828282828272727272727\r
+        1B1B30302727272730302730393925252534393737373737373737371D040404\r
+        0404040404040A0D141F1F32323232323232323232324B400C010A2B2B2B2B2B\r
+        404D4D4D4D4545300A02020202141408020809090401010101040E1D1D131313\r
+        1F1F1F2B2B2B2B342B130400010A03031D39270A0A0F1F1B27404D4D4E4E4E43\r
+        39272734343434342323282827272727272727271B1B1B1B1010100B0B0B0B0B\r
+        0B0B0B1010101C1C1C2424243030303030282828232330272727272727272730\r
+        39393232323037373737373737373737370E040404040404040404080D131F25\r
+        2525323232323232323E4E390C000A3232242B40464D4D4D453B3B4523040101\r
+        0D140D020409090901010101010A18180D0A0E0E1F1F1F25252525342B0A0000\r
+        0404000A131D1D0C0D212B1924424E4E4E4E4E4E43392C26232B343434343027\r
+        272727272727271B1B1B1B1B1010100B0B0B0B0B0B0B0B101010101C1C282828\r
+        2828282828282828282828282727272730303030393932322B2B2B2B30303030\r
+        3737373737240E040404020202040404040A131F1F1F25252525253236444D37\r
+        0C00082525253646464F4F4545453745450E02090F0F04040404090401010101\r
+        0813130A03080A13131F1F1F2B2B2B361F0100020202020C0C0C0E0E14242727\r
+        2B2F424E4E4E4E4E4E4E433027272324344343372727272727271B1B1B1B1B1B\r
+        1010100B0B0B0B0B0B0B0B101010101C1C242823232828282828282828283434\r
+        2727272727272730393934252528282828282828282837373728180D04020202\r
+        0202020202020A131F1F25323232323236434D370C01081F3434434D4D4D4545\r
+        4545453034340E0E0E080408080808020101010413130A0101080A13131F1F1F\r
+        1F2525362403000404010A0A0A0A13141F1F273737303E4B4334343440404039\r
+        30271B24303034344037272727271B1B1B1B1B1B1010100B0B0B0B0B0B0B0B10\r
+        1010101C1C1C2823232828272727273728283434282727272731313139393425\r
+        2B2B2B2B2B2B2B2B3737373737371B1309020202020404040404040A13131F25\r
+        32323232324345370C010A1F3939464D4D454545454530242440401A09040808\r
+        080802010101010A130D010101030A0E0E1F1F1F1F1F25362B07010303070E08\r
+        08080D131F1F1F303030434B3E1B1B2737373737271D1D282828282834404040\r
+        2727271B1B1B1B101010100B0B0B0B0B0B0B0B101010101C1C1C28281D243027\r
+        27273030272734343430302C2C37373737392B2B303030303030303037373737\r
+        373D37180E08020202040404040404040A0A141F32323232324040370E020D25\r
+        464D4D4D4545454545371D1D25404F390E040909090401010101041313020202\r
+        0203030A13131F1F1F1F1F32320E0000040D0D010808080E0E0E141F24344B4E\r
+        341B2727373737271D1D283737272727273039393939271B1B1B1B101010100B\r
+        0B0B0B0B0B0B0B101010101C1C1C28281D2430272727303027272B3434343430\r
+        303939373739342530303030303030303737373737374527130D040102020504\r
+        02020202020A131F1F322525253445370E040E344D4D4D4545454545451B151F\r
+        34404A4A30130D0D0801010101010F1408010101010101080E0E1F1F1F1F1F1F\r
+        341300000D0D030308080808080F0F14141F32362B2323373737271D1D283737\r
+        3727272727272727392B2B2B231B1B101010100B0B0B0B0B0B0B0B101010101C\r
+        1C1C28281B1B3428282828372823283432323234343434373739343428283030\r
+        3030303030303737373745341B130A01010404040202020404040A131F252525\r
+        253434300E08254D564D393941454545300C15243945454545391D0A04040101\r
+        010D140D02010101010101030A131F1F1F1F1F1F321801041308000404040401\r
+        010A0E141414141F1F1F24303030231D273737272727272727272723231D1D28\r
+        281C1C101010100B0B0B0B0B0B0B0B101010101C2424243023182B3030272737\r
+        3727273434253232323230303939342B2B313030303131313131313939392B2B\r
+        2B27130401010404040404040404040A1321212525323428181A46564D34343D\r
+        3D3D45451506153446453737454A4018040404010A1F0E020202020201010101\r
+        0A131F1F1F1F1F1F251F0A0A0A0101080808020000030A0F141F1F1F1F1F1F25\r
+        34241D2B3737372B2B2B2B2B2B2B2B242424242424241B1B1010100B0B0B0B0B\r
+        0B0B0B1010101C1C1C1C1C302318213434282828373728343434343434343431\r
+        3139343030303037373737373737373737231F25393B28180701010505020202\r
+        020202080E1F25323232343434434D4D3424343D3D3D3D2806031540463D3D3D\r
+        3D4646371B0E08081318030101010101010101010A141F1F1F1F1F1F1F251D0A\r
+        0301040404040101010103080F141F1F1F1F1F1F25252B2B3232323232322121\r
+        21212121242427271B1B1B1B1010100B0B0B0B0B0B0B0B1010101C1C1C282828\r
+        2818143634342B2B373727303934342B2B2B2B35354034343030303737373737\r
+        3737373723182134373737372408020404040404040404040A141F2525253434\r
+        464D341A2525343B3B453B1503031839393939393939454537231818180D0401\r
+        01010103030303030D131F1F1F1F1F1F1F2B1F07010108080802010101010108\r
+        0E141F1F1F1F1F1F2B342B21212121212121212121212B2B27272727271B1B1B\r
+        1010100B0B0B0B0B0B0B0B1010101C1C1C28282828150E343434343434303030\r
+        3934323232323030303934343131373737373737373737371518213437373737\r
+        391804040404040404040404080E1F1F2525323446390A0A252539414145370C\r
+        030A1834393939393939394545372B2B1D0E0D04040403030303030A0F0F141F\r
+        1F1F1F1F1F251F0701080404040101010101010813131F1F1F1F1F1F34341F1F\r
+        1F1F1F1F1F1F1F1F2430302727272727271B1B1B1010100B0B0B0B0B0B0B0B10\r
+        10101C1C1C282828281B0C253432323232322B2B3434342B2B2B2B3535393930\r
+        30303030373737373737371B0C1F25303030303737371B070404040404040404\r
+        0808131F25252534340E01082434394141452706031313153745393939393939\r
+        45372424241313130A0D0D0D0D0D0D131414141F1F1F1F1F1F321F0A03080404\r
+        04010404040404080A13131F1F1F1F343424242424242424241F1F3230302727\r
+        27272727271B1B1B1010100B0B0B0B0B0B0B0B1010101C1C1C28282837230A1F\r
+        3632323232322B2B30343425252530303039393030303030303030303737270C\r
+        0C1F253030373737374545280C04040404040404080808131F1F1F322B0A0008\r
+        1F343741414115030E180A062345393939373737402B2B2B37241D1313131313\r
+        131314141414141F1F1F1F1F1F252513080808080404040403030303080D131F\r
+        1F1F34342B2B2B2B2B2B1F1F1F1F32303027272727272727271B1B1B1010100B\r
+        0B0B0B0B0B0B0B1010101C1C1C28282837280C0D323232323232282837392B2B\r
+        2B343030303939303030313131313137373715030A1F32393737373737374545\r
+        30130A08040404080808080D141F1F25251803031434394149370C0C1F0A0101\r
+        18394539373737372B2525373737372514141313131313131414141F1F1F1F1F\r
+        1F1F321F0A0A0D080404040101010303030A13131F1F1F1F1F252525251F1F1F\r
+        1F32302727272727272727271B1B1B1B1010100B0B0B0B0B0B0B0B1010101C1C\r
+        1C28282837370C04253434323232303030393425253437373739393030303131\r
+        3131313131270C030A18343937373737373737454537231308080808080D0D0D\r
+        131F1F1F25240C031334394141270C1313010108081B4545373737281A243939\r
+        394545403221141414141414141414141F1F1F1F1F1F2525130D080401010101\r
+        01010101010813131F1F131F1F1F25252525252525302727272727272323231B\r
+        1B1B1B1B1010100B0B0B0B0B0B0B101010101C1C1C1C2828283718011A343434\r
+        343430303039342B2B34373737373939283030303030303037150303030C3039\r
+        3737373737373737454545301D0E0E0E0E0E131313131F1F1F321D0A13403D3D\r
+        3D23180F03000404040A23404545301D1D244545454545464B43251A14141414\r
+        14141414141F1F1F1F1F1F321F080202010101010101010101030D1F1F1F1F1F\r
+        1F242424242424322B272727272723232323231B1B1B1B101010100B0B0B0B0B\r
+        0B0B101010101C1C1C282828283723030E343434343430303039393434343737\r
+        373739392828282828282837270C010303032439393037373737373739464545\r
+        402514131313131313131F1F1F3232180E34454545280E0400030A040404061D\r
+        3D30242418283D4545454544444E4D34251F1F14141F1F1F1414141F1F1F1F25\r
+        250C0104040101010101010101030D1F251F1F1F1F2424242424322B2B202323\r
+        232323232323231B1B1B1B101010100B0B0B0B0B0B0B101010101C1C1C1C2828\r
+        2837300A0325342B2B2B2B313131393434343737373739393030303030303037\r
+        2306010101010E303B3737373737373737404641402F2F2B1F1313141414141F\r
+        1F2525250E1F404545240701010A04040A0A010618181839393937374D464342\r
+        4B4D4D4D45302414141F1F1F1F1414141F1F1F1F251D03030303030303010101\r
+        010313241F1F1F1F1F1F2B2B2B2B2B2B2727272723232327272727271B1B1B1B\r
+        1010100B0B0B0B0B0B0B0B1010101C1C1C1C28282837370E010E323232323030\r
+        3030393434343737373739393131303030303030150303030303081D37373737\r
+        37373737373D4646433C4E4E341F14141F1F1F1F1F1F25251F1F404A451D0303\r
+        08080308080303030A0E243939393939434E4E4E4E4E4646453737241F1F1F1F\r
+        1F141F1F1F1F1F1F1F2B0C010101010303010101010A181F141F1F1F1F1F2B2B\r
+        2B2B2B27272727272727272727272727271B1B1B1010100B0B0B0B0B0B0B1010\r
+        10101C1C1C242430303030180108253434343437282839343434343131313939\r
+        31313030303037270C0101010103030D2B393737373737373737464E4E4B5656\r
+        5640241F1F1F1F1F1F1F1F252525404F390C03030A030308030303080A0A1824\r
+        3037343E4E4E4E4E4E434343393930303030241F14141F1F1F1F1F1F1F251D03\r
+        0101010104040401030C1313131F1F1F1F1F1F25252B27272727272727272727\r
+        27272727271B1B1B1010100B0B0B0B0B0B0B101010101C1C1C24243030303030\r
+        03011F3434343431313131393434343131313939372730303030392306010101\r
+        0303030A142B373737373737404D4E4E4E4E4E4E4E463930241F1F1F1F1F1F25\r
+        2525344023060A0E08030A0A0100030A0A0A0A0A1D373E3C4E4E4B4B4B4B4D4D\r
+        4040373737373734241F1F1F1F1F1F1F1F1F2B1803000000020202020D0D0D0D\r
+        141F1F1F1F2525252B2B2727272727272C2C2C2727272727271B1B1B1010100B\r
+        0B0B0B0B0B0B10101010101C1C1C2430303030300C000D343434343030303039\r
+        3934303030303040372727303737371503030202020208080814303937373730\r
+        3E52524B4B4E4E4E4E4D454139301F1F1F1F1F1F2525253415030A130A0A0A01\r
+        01010808030A030308182B3E4B4B4B4E4E4E4E4E4E464040373737372B1D1313\r
+        13141F1F1F1F25250E0301010101010A0E0A0A0E1F1F1F1F1F1F1F2530353535\r
+        3535353535353535352C272727271B1B1B10100B0B0B0B0B0B0B0B101010101C\r
+        1C1C1C28282828281801011F3434343030303039393430303030304037272730\r
+        3037370C0303030303030808080A1F34393937302F4B524E4E4E4E4E4E4E4D4D\r
+        454539241F1F1F1F1F2525251D0C06060E0E080000080801080801010408131F\r
+        2F424B4B4343434E4E4646392834404030241D0E0E14141F1F1F1F2B2B0E0303\r
+        0301040A0A03030E1F1F1F1F1F1F25253035373737373737372C2C2C2C2C2C2C\r
+        27271B1B1B10100B0B0B0B0B0B0B0B101010101C1C1C1C28282828282807000D\r
+        34343430272727393939393030303040392C2C303030230A0302020202020202\r
+        02080F1F2B343939303E4B4B4E4E4E4E4E4E4E4E46454545342B2B1F1F1F1F25\r
+        25250C060C0E0A0308080404040101010104040D1F2F3E3E2424404640404034\r
+        34393939303024180E04040F1F1F1F1F32240C030303080A0300030D141F1F1F\r
+        1F32322B272727272737373737272C2C2C2C2C272727221C1C1010100B0B0B0B\r
+        0B0B0B101010101C1C28282828373730300E01041F3634342727273040403430\r
+        303030393935303030301B03030303040404040404040D0D142434393737434B\r
+        4B3E3E3E46464646464541414141302B2B1F1F1F252525180A030A0E0E040108\r
+        040001010103030A1314212124243939393939303039392B2B30183418010104\r
+        040F14141F3232180C0C0A0A0000080E0E1D1D1D25252B272727272727272727\r
+        27272727272727272222221C1C1010100B0B0B0B0B0B0B1010101C1C1C1C2828\r
+        28373728282304010D3434342727273039393430303030393937303030301503\r
+        020202040404040404040A0A13131F323439434E4E32243145454545453B3B3B\r
+        3B3B3B341D14141F25253232180A0A1F1F0A040401010101010104080D131314\r
+        1F3439393940343434393030301D0E34371507070000040A0A14323636251807\r
+        0303030D131F1F1F1F2524232323232323232323232323232727272727271C1C\r
+        1C1010100B0B0B0B0B0B101010101C1C1C1C28282837282828280A01021F3934\r
+        282828283939393030303030393737373737150302020202040404040404040A\r
+        0E0E1F1F1F323E4B4B2B2B394545454545453B3B3B3B45390A03132525252525\r
+        25252D2D2F250E0401010101010103030A0F0F141F1F25343434343434343439\r
+        39180E2440371B0701010303030A1D3443433E321A07070D14141F1F1F2B2B1B\r
+        1B1B1B1B1B232323232323202020202727271B1B1B1010100B0B0B0B0B0B0B10\r
+        10101B1B1B1B28283030303030301803010F3639282823233739392828282828\r
+        3939273030300C030202020202020202020202080A0E0E1F1F25323434343434\r
+        344545393939393939394A3D0C01132418181F1F2525363E3E3E250F04040101\r
+        00000303080D1313131F1F1F2532323234343434341D181D343430180E0E1818\r
+        181F2525251814212F1D0A0A13131F1F1F24241B1B1B1B1B1B1B1B1B1B1B1B1B\r
+        1B1B1B2727271C1C1C1010100B0B0B0B0B0B0B1010101C1C1C1C282828282828\r
+        2828230A010425403030232330393930302727303939282828280A0302020202\r
+        02020202040404040A0A0E0E1F25252525323434343440393939393939454545\r
+        23071818180E0E0E1F1F24343E42422F1F14090404040404040A13131F1F1F1F\r
+        1F1F1F1F2525252525252525252525252525251F1F3232130803030808080A0A\r
+        0F0F1F1F1F1F231B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B272727221C1C10100B\r
+        0B0B0B0B0B0B0B1010101C1C1C1C2424243030302424301302020D3639282828\r
+        28393939282727273939282828230A040404040404020202040404040A0A0A13\r
+        1F1F252525323636363636343434343434343434342B2B2B2B2B1F1F1F323232\r
+        1F13142D2D0D05050909020202080D13131F1F1F1F1F1F1F1F1F1F2525252525\r
+        2525323232212121211F0A030303030300030A0E0E0E1D1D24241B1B1B1B1B1B\r
+        1B1B1B1B1B1B1B1B1B1B1B1B2222221C1C10100B0B0B0B0B0B0B101010101C1C\r
+        1C1C242424303030232337230701021443302727303039392828232339392828\r
+        28280A04040404040404040404040404040A0A131D1D25323232323636363636\r
+        3636363636363636363636363632323232321F0D030303090902020202020203\r
+        03030A0A131F1F1F1F1F1F1F1F25252521212121213232323221211F1F0A0300\r
+        0003030000030A0A1313131F2B232323231B1B1B1B1B1B1B1B1B1B1B1B1B1B1B\r
+        1B1B1C1C1C10100B0B0B0B0B0B0B0B1010101C1C1C1C24242424242424243030\r
+        180202043239282828283939372727273440303030300C040404040404040404\r
+        0404040404080A131F1F1F323234343434363636363636363636363632323232\r
+        323232321F0D04010101010101010101010101010101080A131F1F1F1F1F1F25\r
+        25252525252525253232323232322424180A0A0303030303030A0A0A1313131F\r
+        2B2B2727271B1B232323231B1B1B1B1B1B1B1B1B1B1B1B1B1010100B0B0B0B0B\r
+        0B0B0B101010101C1C1C1C282828282828232330230A01010F40302727303939\r
+        392727273040392730300E0404040404040404040404040404040E0E141D1D25\r
+        2534343436363636363636363636363232323232323232140801010104040404\r
+        04020101010101010101030A0E0E1F1F1F1F1F25252525252525253232323232\r
+        322B2B3430180D0D0A0A0A0A0A0A0A0A13131324303030272323232323231B1B\r
+        1B1B1B1B1B1B1B1B1B1B1B1B1010100B0B0B0B0B0B0B0B101010101C1C1C2424\r
+        2424242424242424301804020421342828282839393030272739392727270A04\r
+        04040404040404040404040404040D0D131F1F1F323232363636363636363636\r
+        3636323232323232321F13040101010404040202020201010101010103030308\r
+        0D13131F1F1F1F1F252525253232323232323232303030394D391D1313131313\r
+        0A0A0A0E0E0E1F2B373737373737272727271B1B1B1B1B1B1B1B1B2727271C1C\r
+        1C1010100B0B0B0B0B0B10101010101C1C1C2424242424242424242430270E04\r
+        04092B3030303039393928282828393030230A04040404040404040404040404\r
+        0408080A131F1F1F32323236363636363636363632323232323232321F130A03\r
+        03030304040402020202020202010101030303080D13131F1F1F1F1F1F253232\r
+        3232323232323239393939454D4D401D13131313131313131313132B373B3B3B\r
+        3B3B3B353535272727272727272727272727221C1C1010100B0B0B0B0B0B0B10\r
+        1010101C1C1C2424242424242424242430301D0802021F393123233039392828\r
+        2828393930230A040404040404040404040404040808080A13131F1F25253436\r
+        3636363636363636363632323232341818180404040404040404040404020202\r
+        02010101010303080A13131F1F1F1F1F1F25253434323232362B1D2440394545\r
+        4D4D4537270E0E13131313131313132B3B3B3B3B3B3B3B3B3B3B3B3535353535\r
+        353535352828221C1C1010100B0B0B0B0B0B0B101010101C1C1C1C2828282828\r
+        232323232B2B2B180402092B37232328374037272727393928230A0204040404\r
+        04040404040404040404040A0E0E1F1F25253232323636363636363636323232\r
+        32393923230E010404040404040402020202020202010101010103080813131F\r
+        1F1F1F1F1F3232343434343434130718404030434E463B3B3B27180D0D131313\r
+        13131F2B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3737373737372828221C1C101010\r
+        0B0B0B0B0B0B0B101010101C1C1C1C2828282828232323232B2B2B230C02020F\r
+        2B2B2727304040282828283928230A040404040404040404040404040404040A\r
+        0A131F1F2525323236363636363636363636363640454530240D020202020202\r
+        080802020202020202010101010103030A0A131F1F1F1F1F2525323434343434\r
+        130404131F342B3446463D3B3B3B3B230E0E13131313132B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3B3B3B3B3B37373728221C1C1010100B0B0B0B0B0B0B1010101C1C\r
+        1C1C1C28282828282823232323303023230A0104213927272330403027273039\r
+        39230C04040404040404040404040404040404080A131F1F1F25323236363636\r
+        363636363636364045454528180D040404040404040404040202020202010101\r
+        010101040A0A0E141F1F1F1F252532323434320F04040A0A0A1F343E40404A45\r
+        45454541311D0D0D1313132B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37373737\r
+        3722221C1C1C10100B0B0B0B0B0B0B1010101C1C1C1C1C242424243024232323\r
+        2328282323230702092B37232323393928232834393018040404040404040404\r
+        04040404040404080A13131F1F25253436363634343434343434454545453928\r
+        180D040404040404040404040404040401010101010101080A0A0E141F242424\r
+        2432323636210D0202080A0A0A13243230454545454545454C4124181313132B\r
+        414141414141414141413B3B3B3B3B3B373737372828221C1C1C12120B0B0B0B\r
+        0B0B0B101010101C1C1C1C2424242424242323232323302323301803010E3430\r
+        23151D403723233039301B0A040404040404040405050505050505080A0E0E1F\r
+        1F25253434343434343434343445454545393937180D04040404040404040404\r
+        040404020101010101010108080D13131F1F1F25253434341F040202080D0808\r
+        0A0E0E0E24303030394145454545453728231D2B45414141414141414141413B\r
+        3B3B3B3B3B3B37373728281C1C1C10100B0B0B0B0B0B0B101010101C1C1C1C1D\r
+        1D24242424232323232330242424281501021434271B0C1F393023283434230A\r
+        04040404040404040505050404040408080D131F1F2532343434343434343434\r
+        4545454545244545180D08010404040404040202020202020201010101010308\r
+        0A0A13131F1F252534343424080104090F0802020A0A0A131F1F1F2424303039\r
+        393939454537243443464541414141414141413B3B3B3B3B3B3B37373728281C\r
+        1C1010100B0B0B0B0B0B0B101010101B1B1B1D1D1D1D1D1D242424241D1D2B2B\r
+        232323230E02082B37271509243928283434230C040404040404040404040404\r
+        04040808080D131F1F253434343434343434344045454545301C4545230E0A01\r
+        04040404040402020202020202020101010101080A0A13131F1F2B2B3443340C\r
+        0208080F0902020A04040A13131D1D1D24242424242424243234373943434545\r
+        41414141414141413B3B3B3B3B3B37373728281C1C1C10100B0B0B0B0B0B0B10\r
+        1010101C1C1D1D1D1D1D1D1D242424242424242424242424240C020D3430300A\r
+        092530232B39300C04050505040404040404040404040408080E0E1F1F252534\r
+        3434343434344045454545453939454537180D02020404040402020202020202\r
+        02020203030303030A0E0E1F1F2525253643300C0404040404040D0801030A0E\r
+        0E1D1D24242421212121212134343B3B3B3B45454545453B3B3B3B3B3B3B3B3B\r
+        3B3B3B313128281C1C1C10100B0B0B0B0B0B0B101010102424181D1D1D1D1D1D\r
+        24242323232323303023232323230A041434301B051434272439391504050505\r
+        0404040404040404040404040A0E0E1F1F253434343434343440454545454539\r
+        3945454545280E0303030308040404020202010101010101040408080D13131F\r
+        1F1F252532403715020208040408080202030A0A131D1D252525252525252539\r
+        454141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B313128281C1C1C1010\r
+        0B0B0B0B0B0B0B101010101C1C1D1D1D1D1D1D1D24242323232323232B2B2B2B\r
+        2B2B1D0A042430300E091F372334401B03040404040404040404040404080808\r
+        080D131F1F25343434343434394545454545453945454545493B180801010104\r
+        0404010101010101010101010104040A0E141F1F1F3232323439391D01040404\r
+        080802020203080A131D1D253232323232323945454141414141414141413B3B\r
+        3B3B3B3B3B3B3B3B3B3B3B313128281C1C1C10100B0B0B0B0B0B0B1010101018\r
+        181818181D1D1D1D1D2B2323232323232B2B2B23232323230C0A2430230C0D2B\r
+        2B2B40300A040505050404040404040404040408080D131F1F25343434343434\r
+        4545454545454545454545454545341A03030303030303030303010101010103\r
+        0303030A0E141F1F2B2B3434393939240C040404080401020202030A131F1F25\r
+        32323232344045454545454141413B3B3B3B3B3B3B3B3B4141413B3B3B3B3B37\r
+        372828281C1C12120B0B0B0B0B0B0B0B10101018181818181D24242424242424\r
+        242424242B2B2B2B23232323230C1325301D0E18302434391802020505050505\r
+        0504040404040404080A131F1F25252525253439454545454545454545454545\r
+        39344030040303030303040404040101010101040303030A13131F1F2B323640\r
+        3B302B3423040408040101040404030A131F1F1F323232344045454545454141\r
+        413B3B3B3B3B3B3B3B3B3B414141414141414137372828281C1C12120B0B0B0B\r
+        0B0B0B0B0B101018181818182323232323232323232424242430242323232323\r
+        232318182B2B1B1B34282436240A0404040404040404040404040404040A131F\r
+        1F2525252525343D454545454545454545454537252545390A03030303030303\r
+        03030101010104030303080A131F1F252534344537151A3630180D0401010104\r
+        040101030E1D2424243234404545454545414141414141414141414141414141\r
+        414141414141413B313128281C1C12120B0B0B0B0B0B0B0B1010101010101D1D\r
+        1D2424232323232323242424243030232323232323232318243023233439212F\r
+        30180D05040404040404040404040404080D13131F3232323234394545454545\r
+        393945454545271D253945452303030303030303030303030303030303030A0E\r
+        1D1D242434343945230C1A3439391D0401010101010101030E1D1D1D25253945\r
+        4545454545454545414141414141414141414141414141414141413B3131281C\r
+        1C1C12120B0B0B0B0B0B0B0B101010101010101D1D1D24232323232323232323\r
+        2330302323231D1D1D1D24232334301D2439323239270E040404040404040404\r
+        08080808080D13131F252525253945454545453B3B3B454545280A14343D3D3D\r
+        451B0A0A040303030303030303030303030A0A141F1F1F25343445370C0C2439\r
+        45453713030303030303030313131F1F24344545454545454545454545414141\r
+        414141414141414141414141414141373728281C1C1C12120B0B0B0B0B0B0B0B\r
+        0B101010101313131D1D1D1D1D1D242423232323232330231D1D1D1D1D1D2424\r
+        242439231D25363434371B0A040404040808080808080404080D13131F252525\r
+        34394545454545373D3D3D3D370C0C243939454545451B0C0803030303030303\r
+        08080808080E0E1F1F2525253440492302022445454545240E0A0A030303030A\r
+        13131F1F34454545454545454545414141414141414141414141414141414141\r
+        414141373728281C1C1C12120B0B0B0B0B0B0B0B0B0E0E0E0E13131313131D1D\r
+        1D1D1D24241D23232323232323231D1D1D1D2323232332300C1F3E343434270C\r
+        0A0A040404040409080404040A0E0E1F1F252525343D45454545393939454545\r
+        23060C2B40454545454C37180A0707070703030A0A0A0A0A13131F1F1F242424\r
+        39454518010113454C3D3D3D1D13130A0A0A0A0A13131F2B3945454545454545\r
+        4141414141414141414141414141414141414141414141373728281C1C1C1212\r
+        0B0B0B0B0B0B0B0B0B0E0E0E0E13131313181D23232323232323232323232323\r
+        23231D1D1D1D1D1D1D1D1D24151432393030301B0E0E08040404040404080808\r
+        080F0F1F1F32323239454545454537373D3D45300C030A2B4545454539454537\r
+        180A0A0A0A0A0A0A0A0A0A0E0E1F1F1F1F1F25254045450C03030A2445454541\r
+        391F13131313131313131F2B4045454545454545414141414141414141414141\r
+        4141414141414141414137373728281C1C1C12120B0B0B0B0B0B0B0B0B0E0E0E\r
+        0E131313131D232323232323232323232323232B2B23231D1D1D1D1D1D1D1D1D\r
+        1D3221343434303024130A0A0A0A0A04040408080D0D141F2525253440403D3D\r
+        3D3D37373745452303030324454545453945454530180C130E0E0E0E0E0E0E0E\r
+        1F1F1F1F1F25252539493B0A0408080C2B454541464324131313131313131F34\r
+        454545454545454141413B3B3B3B414141414141414141414141414141413737\r
+        3728281C1C1C10100B0B0B0B0B0B0B0B0B101010131313131D1D232323232323\r
+        23232323231D1D24241D1D1D181818181818180A13362B2434342B2B2B230E0A\r
+        0A0A0A0A030303080A131321212B323939454537373737373745370C03030318\r
+        4545454545394C4C4C391D1313131313131313131F1F1F1F1F32322B3745300A\r
+        040908030E304545464D3923130F131313131F394541414141414141413B3B3B\r
+        3B3B3B3B3B3B41414141414141414141413737373728281C1C1C10100B0B0B0B\r
+        0B0B0B0B1010101010181818232323232323232323232323231D1D1D241D1D1D\r
+        1D18181818180C03081F39242434343030301D1D0E0A0A0A0A0808080D131F25\r
+        252525253D45454537373737374028060101030A374C454545394545454D341F\r
+        1F1F1F1F1F1F1F1F1F242424242434394141270A0A0802020218303043464137\r
+        281A1313131324404541414141414141414141413B3B3B3B3B3B414141414141\r
+        41414141413737373728281C1C1C10100B0B0B0B0B0B0B0B101010101010101D\r
+        1D1D23232323232323232323232318181D1D18181818181818180A03030D2434\r
+        2B2B343427272724140F0F0A0A0A0A0A13131F25253224243745454539393939\r
+        39391B03030303031845454545374545454D4D40241F1F1F1F1F1F1F24242424\r
+        242434454545280C04040101010A182B40403B3B45391D131313243D45414141\r
+        414141414141414141414141414141414141414141414141414137373728281C\r
+        1C1C10100B0B0B0B0B0B0B0B1010101010101010101D1D232323232323232323\r
+        2323231818241818131313131D130404040A132B3434343428282828251F1413\r
+        1313131313141F25253234373737453737414141413715030303030303234545\r
+        45453945454D564D2B2B1F1F1F1F1F1F1F1F1F2B2B2B34454545280A01010101\r
+        0108132534343B4545453B2318132441414141414141414141413B3B3B3B3B41\r
+        414141414141414141414141413737373728281C1C1C10100B0B0B0B0B0B0B0B\r
+        101010101010101010101D2323232323232323232323231818241D1813131313\r
+        130C03030808131D2B34283434272730432F1F1F1F1F1F1F1F1F1F2525254045\r
+        373739393941414141370C0000030308080C284545453939464E4E392439341F\r
+        1F1F1F1F24242424242439454539280A03040404040A0E0E14253939393B3B3B\r
+        28131F45414141414141414141413B3B3B3B3B41414141414141414141414141\r
+        413737373728281C1C1C10100B0B0B0B0B0B0B0B0B1010101818181818181823\r
+        231D1D1D1D2323232323231818181D1313131313130A03030808131D1D243434\r
+        342823344E4E321F1F1F1F1F1F1F1F1F32323939373737373B3B3B3B45270600\r
+        010101010A0A15304545373446564637374545341F1F1F1F1F1F1F2525253941\r
+        3730300C08080808080D0D0E1824323234343434342424434541413B3B3B3B3B\r
+        3B3B3B3B3B3B3B414141413B3B3B41414141413B3B3B3B373728281C1C1C1010\r
+        0B0B0B0B0B0B0B0B1010101018181818181818181D1D1D1D1D1D24241D181818\r
+        18181D1D131313181808030303080F1F1F1F253440392343564634251F1F1F1F\r
+        1F1F1F1F323239414130303D3D3D3D3D4527030001010101080808133445452B\r
+        434E3931454545454525251F1F1F1F2525344545373737070404040404040404\r
+        0A1F1F1F25323232323939393B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4141413B\r
+        3B3B3B4141414141414141373728281C1C1C10100B0B0B0B0B0B0B0B10101010\r
+        181818181D1D1D1D1D1D181818181D1D181818181818181D1313131818040404\r
+        040409141F23232334242448564528282B1F21211F1F1F1F3232394141303045\r
+        45454545452303010101010404040A0F1D30463E3E3E46464C41414141413421\r
+        21212B2B253445453939410C020205040401030308131F21212121343941413B\r
+        3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B41414141414141414137\r
+        3728281C1C1C12120B0B0B0B0B0B0B0B10101010131313131D1D1D1D1D1D1D18\r
+        18181818181818181818181D181818180E0804040404040D142B2B231A1A4352\r
+        4E402727302B211F1F1F1F1F323237414131314545454545452703030404040A\r
+        0A0A0A13132436424246464D4D4D454541414140322121212134454539394923\r
+        0102050202020303030C1D212125343D4141413B3B3B3B3B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3131281C1C1C10100B0B0B0B\r
+        0B0B0B0B10101010101313131313131818181818181818181818181818181818\r
+        181818180C040404040404080F1F322B232B4B4B43433928282828251F1F1F1F\r
+        323437414137373D4545454545270A040808080D0A0A0A0A131F1F323E45454F\r
+        4F4F4F454545454C4C403232253434283D3D493B0C02020101010101030A1321\r
+        323941414141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3737373728281C1C1C10100B0B0B0B0B0B0B0B0B0E0E0E13131313\r
+        131313131318181818181818180E0E0E0E181818181818180C04040404080808\r
+        08132132304342363446463939393939251F1F25253439393939393945453737\r
+        37230A04040404040404040A0E0E0E1F253439393B4545454545454949494940\r
+        32323224304141492303010101010101040A1324344141414141414141413B3B\r
+        3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3737373728281C\r
+        1C1C10100B0B0B0B0B0B0B0B1010101013131313131313131313130E0E0E0E0E\r
+        0E0E0E0E131313131D1D1D1D0A040404040404040A0D142525363636373D3D3D\r
+        394040404032212121343B3B3B3B393939393939392707010101010101040404\r
+        040A13131F25252530303939454545454545454534343E3E2437414141150101\r
+        0101010103080E24394141414141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B313122221C1C10100B0B0B0B0B0B0B10\r
+        1010101313131313131313131313130E0E0E0E0E0E0E0E0E0E0E0E181D1D1D1D\r
+        0A040404040404040808131F1F25253434343030303B39394545342121343930\r
+        39393939393939454C300601010101040408040103080E0E1F1F252525253434\r
+        343434343434343434344343433B3B3B493B0C010101010101030E2437413B3B\r
+        3B41414141414141414141414141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B313122221C1C10100B0B0B0B0B0B0B10101010131313131313131313\r
+        1313130E0E0E0E0E13131313131313181824241D0A0404040404040808080D14\r
+        1F1F25323232322B34373737374539343434341D1D394545454545454C300701\r
+        010104090902020202080A131D1D2525253434343434343232323434343D4141\r
+        4643393B3B41350C0202020203030E2B41413B3B3B4141414145414141414141\r
+        4141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B313122221C1C1010\r
+        0B0B0B0B0B0B0B101010101313131313131313131313130E0E0E0E0E0E181818\r
+        18181818182424180A040404040404080808080F141F1F252525253234343434\r
+        3434343434344B3627374545454545454535070102020808040202020202080E\r
+        181F25323232323232323232323945393945454541393939393B3B3414070104\r
+        0404133041414141414141414141414141414141414141413B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3B3B3B3B3B3B3B313122221C1C10100B0B0B0B0B0B0B0B10101010\r
+        131313131313131313131313130E0E0E0E181818181818181824241B0A040404\r
+        040404040404080D13131F1F2525323232323232323232323737434B433B3B45\r
+        454545454C370A0108080404040404040404040C131D25323232323232323232\r
+        40403B3B414141413945453B3B3B3B3636280C020203183741413B3B3B3B3B41\r
+        41414141414141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B\r
+        313122221C1010100B0B0B0B0B0B0B0B10101010131313131313131313131313\r
+        130E0E0E0E0E0E0E181818181D1D28230A04040405050505050508080F0F141F\r
+        253232323232323221212B2B3737374040404041414141454C41150308020202\r
+        0202020202030A0A0E1F1F2B3232323232323639394137374141413728284045\r
+        453B30364545371B07030C37413B3B3B3B3B3B3B3B3B3B414141414141414141\r
+        3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B373728281C1C1010100B0B0B0B\r
+        0B0B0B0B0B101010101013131313131313131313130E0E0E0E0E0E0E18181B1B\r
+        1B1B2B2B0C040404050505050404040808131414212121323232323232323131\r
+        373737373939393D3D3D374545451B030303030302020202020808080C131F1F\r
+        252532323236393941373741413B3B3B37232B2B2B3940404141414127151834\r
+        3D3B3B3B3B3B41414141414141414141414141413B3B3B3B3B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B3B3B313128281C1C1010100B0B0B0B0B0B0B0B0B10101018181818\r
+        181313131313131313130E0E0E0E181818182323232323281504040405050505\r
+        04040404080F14141F252532323232322B3037373737373737373D4545454539\r
+        393924030101030303030303030A03030A131F1F3232343436363B3B3B373741\r
+        413737373737271D131F3636414141373737283434373B3B3B3B414141414141\r
+        41414141414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B313128281C\r
+        1C1010100B0B0B0B0B0B0B0B1010101018181818181813131313131313131313\r
+        13131818181823232323232318070404050505050404040409090F141F1F2525\r
+        252525253030303037373737373D3D45454545393939340C0101010102020202\r
+        040404040A131F1F32323236364545453939414137373737373737371B0D0D1F\r
+        2B3737373737373737373B3B3B3B3B3B3B3B3B3B414141414141414141414141\r
+        414141414141413B3B3B3B3B3B3B3B373728281C1C1010100B0B0B0B0B0B0B0B\r
+        1010101018181818181818181313130E0E0E0E0E0E0E18181818232323232323\r
+        230C0304040404040404040808080D131F1F1F25252525303030303037373737\r
+        3D3D3D3D45454530243440270303030303030303080404040A131F2424323234\r
+        3D4949403945453B3B3B3B2C2C37373737180E18181830373737373737373B3B\r
+        3B3B3B3B3B4141414141414141414141414141414141414141413B3B3B3B3B3B\r
+        3B3B3B313128281C1C1010100B0B0B0B0B0B0B0B101010101818181818181813\r
+        13130E0E0E0E0E0E0E0E0E1D1D1D1D1D1B1B1B24341803030505050404040408\r
+        0808080F1F1F1F252525303030373737373737373D3D3D3D3939392314344A45\r
+        1807070404040404080404040A131F1F25253440454545394545453B3B3B3737\r
+        373737372834403B271B1D243437373737373B3B3B3B3B3B3B3B414141414141\r
+        414141414141414141414141413B3B3B3B3B3B3B3B3B37372828281C1C101010\r
+        0B0B0B0B0B0B0B0B1010101018181818181813131313131313130E0E0E0E0E1D\r
+        1D1D1D1D1D1D1D2434240A030404040404040408080D0D0D141F2525252B2B31\r
+        31373737373737373D3D3D3D3D45270E143445453B180E040404040404030303\r
+        0A131F1F323239454545373741413B3B3B3B3737373737373034393537373737\r
+        3030303B3B3B3B3B3B3B3B3B3B3B41414141414141414141414141414141413B\r
+        3B3B3B3B3B3B3B3B3B3B37372828221C1C1010100B0B0B0B0B0B0B0B10101010\r
+        181818181818131313131313131313131313131D1D1D1D1D1D1D1D2424241808\r
+        0D08080404040408080D0D0D141F252525303030373737373737374545453439\r
+        45450C0C2539454545370E0404040404040303030A131F1F3234393945453741\r
+        4137373737373737373737373939373737373737373737373B3B3B3B3B3B3B3B\r
+        4141414141414141414141414141414141414141414141414141414141373737\r
+        2828221C1C1010100B0B0B0B0B0B0B0B10101010181818181813131313131313\r
+        1818181818181818241D1D1D1D1D181F2424240E0E0808080808080808080D0D\r
+        141F2525253030373737373737374545453039454528030C344040454545300A\r
+        03030303030303070C181F252534394141414141373737373737373737373737\r
+        3939353535373737373737373B3B3B3B3B414141414141414141414141414141\r
+        414141414141414141414141413B3B3B3B3B37372727221C1C1010100B0B0B0B\r
+        0B0B0B0B10101010181818180E0E1818180E0E0E181818181818181824241818\r
+        18180E1F2424241D0E0808080808080808080D0D141F1F253030303737373737\r
+        3737454539394545450C010E40404040454545240A0A0A0A0A0A0A0E181F2525\r
+        2539414141373737373737373737373737373737343737373535353737373737\r
+        373B3B3B3B414141414141414141413B3B3B4141414141414141413B3B3B3B3B\r
+        3B3B3B3B3B3B37372828281C1C1010100B0B0B0B0B0B0B0B1010101018181818\r
+        180E0E181813131313131D181818181824241D1D1D150A1F2424242418180A04\r
+        040404040A0A0D0D141F21253030303737373737373D3D33394545453007010A\r
+        394C45394545454524130E0E0E0E18181F1F1F323445454530303737373B3B3B\r
+        3737373737373734343535373737373737373737373B3B3B4141414141414141\r
+        414141414141414141414141414141413B3B3B3B3B3B3B3B3B3B3B313128281C\r
+        1C1C10100B0B0B0B0B0B0B0B0B10101018181818181313131313131313131D1D\r
+        181818181D241D1D1D0C08182424242424241304040404080A0A0A0E141F2525\r
+        303030373737373737373739454545451B030303234C4C393945454C43211414\r
+        1F1F1F1F1F1F1F2B344545373737373741414137373737373737373230353737\r
+        37373737373737373B3B3B414141414141414141414141414141414141414141\r
+        41414141413B3B3B3B3B3B3B3B3B3B313128221C1C1010100B0B0B0B0B0B0B0B\r
+        0B1010101818181813131313131313131818181818181D1D1D1D1D1D1D0A040E\r
+        1D1D1D2424242413080808080808080D141F252B2B2B30373737373737373745\r
+        454545450E0404010C404F453945454C442F251F1F1F1F1F1F1F1F3239393939\r
+        393B3B3B45453B37373737303030303230303737373737373737373737373741\r
+        414141414141414141414141414141414141414141414141414141413B3B3B3B\r
+        3B3B3B37372822221C1010100B0B0B0B0B0B0B0B0B1010101018181813131313\r
+        131313131313131D1D1D1D1D1D1D241D180A0408132323242423232F25130D0D\r
+        0D0D0D0D131F252B2B2B39373737373737373D3D3D3D45450E040404011D4C4C\r
+        45394545464E462B1F1F1F1F1F1F1F34404039393B3B3B3B3B45453737373728\r
+        2828252B2B35373737373737373B3B3B3B3B3B3B3B3B454545453B3B3B3B4141\r
+        414141414141414141414141414141413B3B3B3B3B3B3B373728281C1C101010\r
+        0B0B0B0B0B0B0B0B0B100E0E0E0E0E0E13131313131313131313181D1D1D1D1D\r
+        1D1D2424180A08080F1D1D1D24242444482B131313131313131F252B2B2B2B39\r
+        37373737373D3D3D3D3D45370A0404040107304C454545454D4D4A452B1F1F1F\r
+        1F1F1F34454531313B3B3B3B373737373737372727272430373737373737373B\r
+        3B3B3B3B3B3B3B4141414141413B3B3B3B3B4141414141414141414141414141\r
+        414141413B3B3B3B3B3B3B373728281C1C1C10100B0B0B0B0B0B0B0B0B0E1010\r
+        10101313131313131313131313131D1D1D1D1D1D1D1D2424130808080D1F1F23\r
+        2324244E4E24242414141414141424302828283737373737373B454545454530\r
+        0704040404040E344C4530344B4D454545341F141F1F1F3445453037373D3D37\r
+        3737373737372727272730303737373737373B3B3B3B3B3B3B3B3B3B3B414141\r
+        3B3B3B3B3B3B3B3B3B3B4141414141414141414141414141413B3B3B3B3B3B37\r
+        3728281C1C1C12120B0B0B0B0B0B0B0B0B0E1010101010101018181818181818\r
+        1D1D1D1D1D1D1D1D1D1D24240E08080808131D242418364E401B1B24241F1414\r
+        141F253030303030303939393B3B454545454530070404040404041330454543\r
+        434537404045341F1F1F253445303039414141413B3737373727272727272737\r
+        37373737373B3B3B3B3B3B3B3B4141413B3B3B3B3B3B3B3B3B3B3B3B3B414141\r
+        414141414141414141414141413B3B3B3B3B3B31313122221C1C12120B0B0B0B\r
+        0B0B0B0B0B1010101818181818131313131D1D1D1D1D1D1D1D1D1D1D1D1D1D1D\r
+        0C0404080808132424244848281B2330302B1F14141F25303030303030393B3B\r
+        3B3B4545454545280A05050504040404132439434D454545454545392B1F1F32\r
+        30303D3D3D3D3D3D3D3D37372727272727272737373737373737413B3B3B3B3B\r
+        3B4141413B3B3B3B3B3B3B3B4141414141414141414141414141414141414141\r
+        3B3B3B3B3B3B3B313128281C1C1C10100B0B0B0B0B0B0B0B0B10101010181818\r
+        18181818181D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0E04040909080D1425344439\r
+        2728282828282424241F1F2B2B2B2B343439393939394545454545310A040404\r
+        0404080808131F32404545454545454949372B25343441414141414141413737\r
+        3737372727272730303030373737413B3B3B3B3B3B3B41414141413B3B3B3B41\r
+        41414141414141414141414141414141414141413B3B3B3B3B3B37373728281C\r
+        1C1C10100B0B0B0B0B0B0B0B101010101018181818181D1D1D1D1D1D1D1D1D1D\r
+        1D1D1D1818181818180808080808080D131F322B2B393928282828282824242B\r
+        2B2B2B393939393939454545454545370C0404040404040404040F1D25343439\r
+        39454545454545344343394545454545453B3B37373737372C2C2C2C2C2C2C37\r
+        37373B3B3B3B3B3B3B3B41414141414141414141414141414141414141414141\r
+        4141414141414141413B3B3B3B3B37373728281C1C1C10100B0B0B0B0B0B0B10\r
+        10101010181818181D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1818181818180D0808\r
+        080808080E0E1F25252534343028282828283434342430393939394545454545\r
+        4545453B0E0404090904040404040A131F1F25343440404040404040404D4545\r
+        4545454541414141413737373737373727272737373737373B3B3B3B3B3B3B3B\r
+        3B3B3B3B3B4141413B3B3B4141414141414141414141414141413B3B3B3B3B3B\r
+        3B3B37373728281C1C1C10100B0B0B0B0B0B0B10101010101A1A1D1D1D1D1D1D\r
+        1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D0D0808080808080D0D131F1F252534\r
+        3434343434343434342B2B373737373745454545454545452304040804040404\r
+        0404040A141F25253236363636363645454545454545454541414141413B3737\r
+        3737313131303030373737373B3B3B3B3B3B3B3B3B3B3B3B4141413B3B3B4141\r
+        414141414141414141414141413B3B3B3B3B373737373131313122221C1C1010\r
+        0B0B0B0B0B0B0B0B0B0E10101010101010181818181818181D1D1D1D1D1D1818\r
+        18232323230E090909090909090A0E1F1F323232323232323232303030393737\r
+        373737373D4545454545454530070404090404040404040A131F252532323636\r
+        364045454545454545454545454141413B3B3B3B373737373737373737373737\r
+        373B3B3B3B414141414141414141414141414141414141414141414141373737\r
+        3737373535353535353531313128281C1C1C10100B0B0B0B0B0B0B0B0B101010\r
+        1818181818131313131D1D1D1D1D1D1D1D1D1D1D1D232323230E080909090909\r
+        09090E141F25323232323232343737373737373737373D3D3D45454545454545\r
+        370C040408080404040404040D141F2525323636404041414141414545454545\r
+        45454545453B3B3B3B3B3B3B3B3737373737373737373B3B3B3B414141414141\r
+        4141413B3B3B3B3B3B3B3B3B3B3B3B3B3B353535353535353535353535353535\r
+        2828281C1C1C10100B0B0B0B0B0B0B0B0B1010101018181818181818181D1D1D\r
+        1D1D1D1D1D1D1D1D1D23232323230E050808080808080D131F1F252525252534\r
+        373737373B3B3B3D3D3D3D3D3D3D45454141414145300A040409090505050508\r
+        08131F1F253434344545454545454541414141454545454545413B3B3B3B3B3B\r
+        3B3B3B3B3B3535373737373737373737414141413B3B3B3B3B3B3B3B3B3B3737\r
+        3737353535353535353535353535353535313131272722221C1C10100B0B0B0B\r
+        0B0B0B0B101010101018181818181D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D23\r
+        232323090909090909090909131F2525252534393737373737373D3D3D3D3D3D\r
+        3D3D3D4545454545454527080509090404040404040A18243236364545454545\r
+        453B3B3B3B3B45454545454545453B3B3B3B3B3B3B3B3B373737373737373737\r
+        373737373737413B3B3B3B3B3B3B3B3B3B353535353535353535272727272735\r
+        352C2C2C2C2C2C2C2C2222221C1C12120B0B0B0B0B0B0B101010101018181818\r
+        1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D232323301D0A0808080808080D\r
+        131F1F252525393939373737373D3D3D45454545454545454545454545454523\r
+        080505040404040404040E1D32364041413D3D3D3B3B3B3B3B3B454545454545\r
+        45453B3B3B373737373737373737373737373737373737373737373737373737\r
+        3737373737372C2C272727272727272727272727272727272727272722222222\r
+        1C1C12120B0B0B0B0B0B0B0B0B0B10101A1A1D1D1D1D1D1D1D1D1D1D1D1D1D1D\r
+        1D1D1D1D1D1D1D23232323301D0A040409090909131A1A212530373737373737\r
+        3939393939454545454545454545454545454545230804040404040404040A14\r
+        253645454545453B3B3B414141414545454545414141413B3B3B3B3B3B3B3B3B\r
+        37373737373737373737373737373535352C2C2C2C2C2C2C2C27272727272727\r
+        272727272727272727272727272727272727221C1C1C10100B0B0B0B0B0B0B0B\r
+        0B0B101018181D1D1D1D1D1D1D1D1D1D1D1D181818181D1D1D1D1D2323232330\r
+        30230F08080808080D131F252537373737373737373737373D3D454545454545\r
+        454545454545454545230A040404040404040A14254045454545373737414141\r
+        41414141413B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B37373737373737373535\r
+        3535353535272727272727272727272727272727272727272727272727272727\r
+        2727272727271C1C1C1C10100B0B0B0B0B0B0B0B0B0B0B0B0E10101010101010\r
+        181818181818181D1D1D1D1D1D1D1D282828232328343E1F0A0808080D131F32\r
+        3937373737373737373737373D3D4545454545454545454545454545454C300D\r
+        0404040404040413344545454545373737373D4141413B3B3B3B3B3B3B3B3B3B\r
+        3B3B3737373B3B3B3B3B3B373737373737373535353535353535272727272727\r
+        2727272727272727272727272720202020272727272727272727221C1C1C1010\r
+        0B0B0B0B0B0B0B0B0B0B0B0B1010101818181818131313131D1D1D1D1D1D1D1D\r
+        1D1D232323282828282F4B4F390E04040A131F343939393939393B3D3D3D3D3D\r
+        3D3D45454145454545454545454545454545422F18040404040404133445453B\r
+        3B3737373737373D3D3D3D3D3D37373737373737373737373737373737373737\r
+        3737373737373737373737272727272727272727272727272727272727272727\r
+        272727272727272727313131313122221C1C12120B0B0B0B0B0B0B0B0B0B0B0B\r
+        1010101018181818181818181D1D1D1D1D1D1D1D1D1D2323233030272B424E57\r
+        57371B0A0A0A1F3439393939393B3D3D3B3D3D3D3D3D3D3D4545414545454539\r
+        4545454545403C44451B07040404040E34454537373737373737373737373737\r
+        3737373737373737373737373737373737373737373737373737373737373727\r
+        2727272723232323232727272727272727272C2C2C2C2C2C3535353537373737\r
+        3728281C1C1C12120B0B0B0B0B0B0B0B0B0B0B101010101018181818181D1D1D\r
+        1D1D1D1D1D1D1D2323231D1D23454545394242494545454515070F3439393939\r
+        39393D3D3D3D3D3D3D3D3D3D3D45454541454545454545454543424D4A453115\r
+        0404040E303D3D3D3D3737373737373737373737373737373737373737373737\r
+        3737373737373535353535353535353535352727232323232323232323232323\r
+        23232323232C2C3737373737373737373B3B3B373728281C1C1C12120B0B0B0B\r
+        0B0B0B0B0B0B1010101010181818181D1D1D1D1D1D1D1D1D1D1D1D2323233939\r
+        394545392F424D41414141415E39183239373737373939393D3D454545454545\r
+        4545454545454545454545454543424D4545453B230A030A303D3D3D3D373737\r
+        3737373737373737373737373737373737373737373737373737372727272727\r
+        27272727272723232323232323232323232323232323232323232C2C37373737\r
+        3B3B3B3B3B3B3B3B313122221C1C10100B0B0B0B0B0B0B0B0B0B10101010101A\r
+        1A1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D233434342424303E48454545453B3B\r
+        3737373739393937373737373939394545454545454545454540454545454545\r
+        394242494545454545371B1B3440403737373731313131313137373737373737\r
+        3737373737372727272727272727272727272727272727272723232323232323\r
+        2323231B1B1B1B1B1B1B1B1B1B2727272737373737413B3B3B3B3B3B31312222\r
+        1C1010100B0B0B0B0B0B0B0B0B0B0B0E10101010101010181818181818181D1D\r
+        1D1D1D1D1D232323301313323224394F453B3737373737373737373737373737\r
+        37373D3D454545454545454545393939394545392F424D414141414141414137\r
+        3434373737373737373737373535353537373737373737373727272727272727\r
+        2727272727272727272727272723232323232323231B1B1B1B1B1B1B1B232323\r
+        23272727353737373B3B3B3B3B3B3B313128281C1C10100B0B0B0B0B0B0B0B0B\r
+        0B0B0B10101018181818181D1D1D1D1D1D1D1D1D1D1D1D1D1D2323232345241A\r
+        130D2556453B3B3737373737373737373737393939373D3D4545454545454545\r
+        453D3434342424303E48454545453B3B3B3B3B3B303030302727272730303030\r
+        3030272737373737373737272727272727272727232323232727272723232323\r
+        231B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2323232727272735373737373B3B3B3B\r
+        373737372828281C1C1010100B0B0B0B0B0B0B0B0B0B0B10101010181818181D\r
+        1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D23234545321A252D2D2B2B343737373737\r
+        393937373737373739393D3D454545454545454545454545301313323224394F\r
+        453B373737373728283131312727272727272727272727272727272727313127\r
+        27272727272723232323232323232323232323231B1B1B1B1B1B1B1B1B1B1B1B\r
+        1B1B1B232323272727272735373737373B3B3B37373737372828281C1C101010\r
+        0B0B0B0B0B0B0B0B0B0B1010101818181818131313131D1D1D181818181D1D1D\r
+        1D1D23232345454246464B3E2824242437373737373737373737373737373939\r
+        3945454545454541454545454545241A130D2556453B3B373737373737372C27\r
+        27272723232323232323232323232323232C2C2C272323232323232323232323\r
+        23232323231B1B1B1B1B1B1B1B1B1B1B1B1B1B23232323232323232727272727\r
+        3737373737373737373737373728281C1C1010100B0B0B0B0B0B0B0B0B0B1010\r
+        10101818181818181818181818181D1D1D1D1D1D1D1D2828284539424D494545\r
+        3B3B3030373737373737373737393939373737373D3D45454545454545454545\r
+        454545321A252D2D2B2B34373728282828282827272727272323232323232323\r
+        2323232323232727272323232323232323232323231B1B1B1B1B1B1B1B1B1B1B\r
+        1B1B1B1B1B1B1B23232323232323232323232335353535353535353535353535\r
+        3528281C1C1010100B0B0B0B0B0B0B0B0B101010101018181818181D1D1D1D1D\r
+        1D1D1D1D1D1D1D1D1D23232328453E4345453B3B3B3B3B373737373739393937\r
+        37373737393939373D3D454545454545454545454545454246464B3E28242424\r
+        34343030303030303027272727272727232323232323231B1B1B232323232323\r
+        23232727272723232323231B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2323232727\r
+        27272727272735353535353535353535353737373728281C1C1010100B0B0B0B\r
+        0B0B0B0B0B10101010181818181D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D232323\r
+        45453E46453B3B3B3737373737373737373737373737373737373739453D3D3D\r
+        3D3D3D4545454545454539424D4945453B3B3030343434313131313131303030\r
+        30303027272323231B1B1B1B1B1B1B1B1B1B1B1B1B1B27272727272323232323\r
+        1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B2327272727272727272735353535353535\r
+        35353535353535353128281C1C10100B0B0B0B0B0B0B0B0B0B0B0B10101A1A1D\r
+        1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D23232323233D383E403D3D3D3D37373737\r
+        37373737373737373737373737373737373D3D45454545454545454545453E43\r
+        45453B3B3B3B3B3737373737373737373737373737372827272723232323231B\r
+        1B1B1B1B1B1B23232323232323272727272323232323231B1B1B1B1B1B1B1B1B\r
+        232323272727272727272735353535353535353535353535353535352828281C\r
+        1C1C100B0B0B0B0B0B0B0B0B0B0B0B101018181D1D1D1D1D1D1D1D1D1D1D1D1D\r
+        1D1D1D2323232828373636393939393131282828373737313131313131313131\r
+        3131282828393939454545454545454545453E46453B3B3B3737373737373737\r
+        3737373737373737373737282828232323232323232323232323232323232323\r
+        2727272727272323232323231B1B1B1B1B1B1B1B232323232727272727272727\r
+        2727272727272C2C2C2C3737313131272222221C1C10100B0B0B0B0B0B0B0B0B\r
+        0B0B0B101010181818181010101818181D1D1D1D1D1D1D1D2323282828252828\r
+        282828282828282828282828282828282828282828282828282828283D45453D\r
+        3D3D3D3D3D383E403D3D3D3D3737373731313131313131313131312828282828\r
+        2823232323232323232323232323232323232727272727272727272323232323\r
+        231B1B1B1B1B1B1B232323232727272727272727272727272727272727353535\r
+        3535272727271B1B1010100B0B0B0B0B0B0B0B0B0B0B0B101010101818181818\r
+        18131D1D1D1D1D1D1D1D1D1D2828222222252222222222222222222228282828\r
+        282823232323222828282828282323233D454539373737373736363939393931\r
+        3128282828282828282828282828282823232323231B1B1B1B1B1B1B1B232323\r
+        23232323272727272727272727272323232323231B1B1B1B1B1B1B1B1B1B2727\r
+        272727272727272727272727272727273131313131312727271B1B1B1010100B\r
+        0B0B0B0B0B0B0B0B0B0B101010181818181823231B1B1B1B1B1B1B1B1B1B1B1B\r
+        28281C1C1C1C1C1C1C1C1C1C1C1C1C1C22222222221B1B1B1B1B1C2222222228\r
+        282828282828282828312828282528282828282828282828282828232323231B\r
+        1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B22222828282828282828\r
+        282323231B1B1B1B1B1B1B1B1B1B1B1B1B222828282828282828282828282828\r
+        2828282831313128282828281C1C1C1C1010100B0B0B0B0B0B0B0B0B0B0B1010\r
+        1010181818181B1B1B1B1B1B1B18181818181818232323231B1B1B1B1B1B1B1B\r
+        1B1B1B1B1C1C1C1B1B1B18181818181818181822282828282828232323222222\r
+        22252222222222222222222222221B1B1B1B1B1B1B1B1B1B1818181818181818\r
+        181B1B1B1B1B1B1B2222222222222222222222222222221B1B1B1B1B1B181818\r
+        18181C2222222228282828282828282828282828282828282828282822222222\r
+        1C1C1C1C1010100B0B0B0B0B0B0B0B0B0B101010101018181818181818181818\r
+        18181818181818181B1B1B1B1B1B1B1B1B181818181818181010101010101010\r
+        101010101010181C22222222221B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C\r
+        1B1B1B1818181818181818181818181818181818181B1B1B1B1B1B1B1B222222\r
+        22222222222222221C1C1C1C1C1B1B1B181818181C1C1C1C2222222222222222\r
+        2222222222222222222222222222222222221C1C1C1C1C1010100B0B0B0B0B0B\r
+        0B0B0B0B0B10101010181818181D101010101010101010101010101018181818\r
+        1818181818181818181818181010101010101010101010101010181818181D24\r
+        1D1D101C1C1C1C1C1A1A10101010101010101010101010101010101010101010\r
+        101010101010101010101B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C\r
+        1C1C1C1C1C101010101C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C\r
+        1C1C1C1C1C1C1C1C1C1C101010100B0B0B0B0B0B0B0B0B0B0B0B0B10101A1A1D\r
+        1D1D101010101010101010101010101010101010101010101010101010101010\r
+        10101010101010101010101010101010101010101010101C1010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        10101C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1010101010101010101C\r
+        1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1010101010\r
+        100B0B0B0B0B0B0B0B0B0B0B0B0B0B101018181D1D1D10101010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        1010101010101010101010101010101010101010101010121212121212121212\r
+        12121210101010101010101010101010101010100B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0E1010101010101010101010101010101010101010101010101010\r
+        10101010101010100B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B12\r
+        1212121210101010101010101010101010101010101010101010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        1010101010101010101010101010101010101010101010101010101010101010\r
+        1010101010100B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B101010101010101010101010100B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B\r
+        0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B}\r
+      Stretch = True\r
+      IsControl = True\r
+    end\r
+  end\r
+  object tmrAboutBox: TTimer\r
+    Enabled = False\r
+    Interval = 5000\r
+    OnTimer = tmrAboutBoxTimer\r
+    Left = 293\r
+    Top = 12\r
+  end\r
+end\r
diff --git a/gpsbabel/win32/gui/AboutDialogU.pas b/gpsbabel/win32/gui/AboutDialogU.pas
new file mode 100644 (file)
index 0000000..e5db993
--- /dev/null
@@ -0,0 +1,67 @@
+unit AboutDialogU;\r
+\r
+interface\r
+\r
+uses\r
+       Buttons, Classes, Controls, Dialogs, ExtCtrls, Forms, Graphics, Messages, StdCtrls, SysUtils, Windows,\r
+       VersionInfo;\r
+\r
+type\r
+       TAboutBox = class (TForm)\r
+               private // invisible outside of the unit\r
+               protected // visible in the unit and in descended classes\r
+               public // visible wherever the class can be referenced\r
+               published // like public, but generates RTTI info\r
+                       lblCopyright: TLabel;\r
+                       lblLicense: TLabel;\r
+                       lblProductName: TLabel;\r
+                       lblVersion: TLabel;\r
+\r
+                       pnlInner: TPanel;\r
+                       pnlOuter: TPanel;\r
+                       ProgramIcon: TImage;\r
+\r
+                       tmrAboutBox: TTimer;\r
+\r
+                       procedure FormCreate (Sender: TObject);\r
+                       procedure FormShow (Sender: TObject);\r
+                       procedure tmrAboutBoxTimer (Sender: TObject);\r
+       end;\r
+\r
+var\r
+       AboutBox: TAboutBox;\r
+\r
+implementation\r
+\r
+{$R *.DFM}\r
+\r
+procedure TAboutBox.FormCreate (Sender: TObject);\r
+var s: string;\r
+begin\r
+       lblCopyright.Caption   := GetVersionString ('LegalCopyright');\r
+       lblLicense.Caption     := GetVersionString ('License');\r
+       lblProductName.Caption := GetVersionString ('ProductName');\r
+       Caption                := lblProductName.Caption;\r
+       lblVersion.Caption     := lblVersion.Caption + GetFileVersion (TFileVersionLong);\r
+\r
+       ShortDateFormat := 'yyyy';\r
+       s := DateToStr (Date);\r
+       if s <> Copy (lblCopyright.Caption, Length(lblCopyright.Caption)-3,4) then // year of original copyright\r
+               lblCopyright.Caption := lblCopyright.Caption + ', ' + s;\r
+end;\r
+\r
+procedure TAboutBox.FormShow (Sender: TObject);\r
+begin\r
+       tmrAboutBox.Enabled := true;\r
+end;\r
+\r
+procedure TAboutBox.tmrAboutBoxTimer (Sender: TObject);\r
+begin\r
+       tmrAboutBox.Enabled := false;\r
+       AboutBox.Visible := false;\r
+end;\r
+\r
+initialization\r
+end.\r
+\r
+\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.cfg b/gpsbabel/win32/gui/GPSBabelGUI.cfg
new file mode 100644 (file)
index 0000000..9d13f67
--- /dev/null
@@ -0,0 +1,38 @@
+-$A8\r
+-$B-\r
+-$C+\r
+-$D+\r
+-$E-\r
+-$F-\r
+-$G+\r
+-$H+\r
+-$I+\r
+-$J-\r
+-$K-\r
+-$L+\r
+-$M-\r
+-$N+\r
+-$O+\r
+-$P+\r
+-$Q-\r
+-$R-\r
+-$S-\r
+-$T-\r
+-$U-\r
+-$V+\r
+-$W-\r
+-$X+\r
+-$YD\r
+-$Z1\r
+-cg\r
+-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;\r
+-H+\r
+-W+\r
+-M\r
+-$M16384,1048576\r
+-K$00400000\r
+-LE"c:\program files\borland\delphi7\Projects\Bpl"\r
+-LN"c:\program files\borland\delphi7\Projects\Bpl"\r
+-w-UNSAFE_TYPE\r
+-w-UNSAFE_CODE\r
+-w-UNSAFE_CAST\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.dof b/gpsbabel/win32/gui/GPSBabelGUI.dof
new file mode 100644 (file)
index 0000000..ba85469
--- /dev/null
@@ -0,0 +1,137 @@
+[FileVersion]\r
+Version=7.0\r
+[Compiler]\r
+A=8\r
+B=0\r
+C=1\r
+D=1\r
+E=0\r
+F=0\r
+G=1\r
+H=1\r
+I=1\r
+J=0\r
+K=0\r
+L=1\r
+M=0\r
+N=1\r
+O=1\r
+P=1\r
+Q=0\r
+R=0\r
+S=0\r
+T=0\r
+U=0\r
+V=1\r
+W=0\r
+X=1\r
+Y=1\r
+Z=1\r
+ShowHints=1\r
+ShowWarnings=1\r
+UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;\r
+NamespacePrefix=\r
+SymbolDeprecated=1\r
+SymbolLibrary=1\r
+SymbolPlatform=1\r
+UnitLibrary=1\r
+UnitPlatform=1\r
+UnitDeprecated=1\r
+HResultCompat=1\r
+HidingMember=1\r
+HiddenVirtual=1\r
+Garbage=1\r
+BoundsError=1\r
+ZeroNilCompat=1\r
+StringConstTruncated=1\r
+ForLoopVarVarPar=1\r
+TypedConstVarPar=1\r
+AsgToTypedConst=1\r
+CaseLabelRange=1\r
+ForVariable=1\r
+ConstructingAbstract=1\r
+ComparisonFalse=1\r
+ComparisonTrue=1\r
+ComparingSignedUnsigned=1\r
+CombiningSignedUnsigned=1\r
+UnsupportedConstruct=1\r
+FileOpen=1\r
+FileOpenUnitSrc=1\r
+BadGlobalSymbol=1\r
+DuplicateConstructorDestructor=1\r
+InvalidDirective=1\r
+PackageNoLink=1\r
+PackageThreadVar=1\r
+ImplicitImport=1\r
+HPPEMITIgnored=1\r
+NoRetVal=1\r
+UseBeforeDef=1\r
+ForLoopVarUndef=1\r
+UnitNameMismatch=1\r
+NoCFGFileFound=1\r
+MessageDirective=1\r
+ImplicitVariants=1\r
+UnicodeToLocale=1\r
+LocaleToUnicode=1\r
+ImagebaseMultiple=1\r
+SuspiciousTypecast=1\r
+PrivatePropAccessor=1\r
+UnsafeType=0\r
+UnsafeCode=0\r
+UnsafeCast=0\r
+[Linker]\r
+MapFile=0\r
+OutputObjs=0\r
+ConsoleApp=1\r
+DebugInfo=0\r
+RemoteSymbols=0\r
+MinStackSize=16384\r
+MaxStackSize=1048576\r
+ImageBase=4194304\r
+ExeDescription=\r
+[Directories]\r
+OutputDir=\r
+UnitOutputDir=\r
+PackageDLLOutputDir=\r
+PackageDCPOutputDir=\r
+SearchPath=\r
+Packages=vcl;rtl;vclx;indy;vclie;xmlrtl;inetdbbde;inet;inetdbxpress;dbrtl;soaprtl;dsnap;VclSmp;dbexpress;vcldb;dbxcds;inetdb;bdertl;vcldbx;adortl;teeui;teedb;tee;ibxpress;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclaxserver\r
+Conditionals=\r
+DebugSourceDirs=\r
+UsePackages=0\r
+[Parameters]\r
+RunParams=\r
+HostApplication=\r
+Launcher=\r
+UseLauncher=0\r
+DebugCWD=\r
+[Language]\r
+ActiveLang=\r
+ProjectLang=\r
+RootDir=\r
+[Version Info]\r
+IncludeVerInfo=1\r
+AutoIncBuild=0\r
+MajorVer=2\r
+MinorVer=0\r
+Release=0\r
+Build=0\r
+Debug=0\r
+PreRelease=0\r
+Special=0\r
+Private=0\r
+DLL=0\r
+Locale=1033\r
+CodePage=1252\r
+[Version Info Keys]\r
+CompanyName=Down East Engineering\r
+FileDescription=\r
+FileVersion=2.0.0.0\r
+InternalName=\r
+LegalCopyright=© Down East Engineering 2005\r
+LegalTrademarks=\r
+OriginalFilename=\r
+ProductName=GPSBabelGUI\r
+ProductVersion=2.0.0.0\r
+Comments=\r
+License=Subject to terms of the GNU General Public License\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.dpr b/gpsbabel/win32/gui/GPSBabelGUI.dpr
new file mode 100644 (file)
index 0000000..b943c1f
--- /dev/null
@@ -0,0 +1,17 @@
+program GPSBabelGUI;\r
+\r
+{%ToDo 'GPSBabelGUI.todo'}\r
+\r
+uses\r
+  Forms,\r
+  GPSBabelGUIDialogU in 'GPSBabelGUIDialogU.pas' {GPSBabelGUIDialog},\r
+  AboutDialogU in 'AboutDialogU.pas' {AboutBox};\r
+\r
+{$R *.res}\r
+\r
+begin\r
+  Application.Initialize;\r
+  Application.Title := 'GPSBabelGUI';\r
+  Application.CreateForm(TGPSBabelGUIDialog, GPSBabelGUIDialog);\r
+  Application.Run;\r
+end.\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.ico b/gpsbabel/win32/gui/GPSBabelGUI.ico
new file mode 100644 (file)
index 0000000..76a19fd
Binary files /dev/null and b/gpsbabel/win32/gui/GPSBabelGUI.ico differ
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.res b/gpsbabel/win32/gui/GPSBabelGUI.res
new file mode 100644 (file)
index 0000000..55edc41
Binary files /dev/null and b/gpsbabel/win32/gui/GPSBabelGUI.res differ
diff --git a/gpsbabel/win32/gui/GPSBabelGUI.todo b/gpsbabel/win32/gui/GPSBabelGUI.todo
new file mode 100644 (file)
index 0000000..7c881ff
--- /dev/null
@@ -0,0 +1,28 @@
+{DONE : v02.00.00 Add About.}\r
+{DONE : v02.00.00 Add Exit button.}\r
+{DONE : v02.00.00 Add Help.}\r
+{DONE : v02.00.00 Add hotkeys for most common buttons.}\r
+{DONE : v02.00.00 Add timer to load formats after form is created.}\r
+{DONE : v02.00.00 Align controls on dialog.}\r
+{DONE : v02.00.00 Don't permit file processing unless GPSBabel is OK.}\r
+{DONE : v02.00.00 Evaluate need for memoStdErr vs. Message dialog.}\r
+{DONE : v02.00.00 Include all project management and Delphi project files in upload.}\r
+{DONE : v02.00.00 LoadFormatsFromGPSBabelExe: Delete unused AllocConsole.}\r
+{DONE : v02.00.00 LoadFormatsFromGPSBabelExe: don't continue if GPSBabel not found.}\r
+{DONE : v02.00.00 LoadFormatsFromGPSBabelExe: 'GPS file formats loaded from GPSBabel.exe.' doesn't get written.}\r
+{DONE : v02.00.00 Look for GPSBabel.exe before attempting to open it.}\r
+{DONE : v02.00.00 Modify to use input filename and output type to generate default output filename.}\r
+{DONE : v02.00.00 Output file dialog: fill in filename and filetype, if possible.}\r
+{DONE : v02.00.00 Port to Delphi 7.}\r
+{DONE : v02.00.00 Process: Delete unused AllocConsole.}\r
+{DONE : v02.00.00 Process: don't allow processing null, or undefined, files.}\r
+{DONE : v02.00.00 Process: handle cases where input/output file is a dir.}\r
+{DONE : v02.00.00 Remove unused console invocations.}\r
+{DONE : v02.00.00 Remove unused variable declarations.}\r
+{DONE : v02.00.00 Rewrite to eliminate 'exit;'.}\r
+{DONE : v02.00.00 Sort default file types by alpha; add sort routine: CANCELLED: placed in GPSBabel.}\r
+{TODO : v02.01.00 Add option to suppress 'internal'.}\r
+{TODO : v02.01.00 Add options for track and route support (-t/-r) for each format, only when available.}\r
+{TODO : v02.01.00 Add serial port support.}\r
+{TODO : v02.01.00 Add sticky output directory.}\r
+{TODO : v02.01.00 Improve menu presentation via 'gpsbabel -^2'.}\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUIDialogU.ddp b/gpsbabel/win32/gui/GPSBabelGUIDialogU.ddp
new file mode 100644 (file)
index 0000000..4370276
Binary files /dev/null and b/gpsbabel/win32/gui/GPSBabelGUIDialogU.ddp differ
diff --git a/gpsbabel/win32/gui/GPSBabelGUIDialogU.dfm b/gpsbabel/win32/gui/GPSBabelGUIDialogU.dfm
new file mode 100644 (file)
index 0000000..2a26ee2
--- /dev/null
@@ -0,0 +1,218 @@
+object GPSBabelGUIDialog: TGPSBabelGUIDialog\r
+  Left = 461\r
+  Top = 119\r
+  BorderStyle = bsDialog\r
+  Caption = 'GPSBabelGUI'\r
+  ClientHeight = 258\r
+  ClientWidth = 380\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  OldCreateOrder = False\r
+  Position = poScreenCenter\r
+  DesignSize = (\r
+    380\r
+    258)\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object lblGPSBabelURI: TLabel\r
+    Left = 66\r
+    Top = 237\r
+    Width = 250\r
+    Height = 13\r
+    Anchors = [akLeft, akBottom]\r
+    Caption = 'GPSBabel: http://sourceforge.net/projects/gpsbabel'\r
+  end\r
+  object lblInputFileName: TLabel\r
+    Left = 17\r
+    Top = 17\r
+    Width = 43\r
+    Height = 13\r
+    Alignment = taRightJustify\r
+    Caption = 'Input file:'\r
+  end\r
+  object lblOutputFileName: TLabel\r
+    Left = 9\r
+    Top = 97\r
+    Width = 51\r
+    Height = 13\r
+    Alignment = taRightJustify\r
+    Caption = 'Output file:'\r
+  end\r
+  object bvlGPSBabelURI: TBevel\r
+    Left = 0\r
+    Top = 222\r
+    Width = 380\r
+    Height = 4\r
+    Anchors = [akLeft, akBottom]\r
+  end\r
+  object lblOutputFormat: TLabel\r
+    Left = 25\r
+    Top = 73\r
+    Width = 35\r
+    Height = 13\r
+    Alignment = taRightJustify\r
+    Caption = 'Format:'\r
+  end\r
+  object lblInputFormat: TLabel\r
+    Left = 25\r
+    Top = 41\r
+    Width = 35\r
+    Height = 13\r
+    Alignment = taRightJustify\r
+    Caption = 'Format:'\r
+  end\r
+  object btnInputFileDialog: TSpeedButton\r
+    Left = 339\r
+    Top = 12\r
+    Width = 23\r
+    Height = 22\r
+    Glyph.Data = {\r
+      76010000424D7601000000000000760000002800000020000000100000000100\r
+      04000000000000010000120B0000120B00001000000000000000000000000000\r
+      800000800000008080008000000080008000808000007F7F7F00BFBFBF000000\r
+      FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00555555555555\r
+      5555555555555555555555555555555555555555555555555555555555555555\r
+      555555555555555555555555555555555555555FFFFFFFFFF555550000000000\r
+      55555577777777775F55500B8B8B8B8B05555775F555555575F550F0B8B8B8B8\r
+      B05557F75F555555575F50BF0B8B8B8B8B0557F575FFFFFFFF7F50FBF0000000\r
+      000557F557777777777550BFBFBFBFB0555557F555555557F55550FBFBFBFBF0\r
+      555557F555555FF7555550BFBFBF00055555575F555577755555550BFBF05555\r
+      55555575FFF75555555555700007555555555557777555555555555555555555\r
+      5555555555555555555555555555555555555555555555555555}\r
+    NumGlyphs = 2\r
+    OnClick = btnInputFileDialogClick\r
+  end\r
+  object btnOutputFileDialog: TSpeedButton\r
+    Left = 339\r
+    Top = 92\r
+    Width = 23\r
+    Height = 22\r
+    Glyph.Data = {\r
+      76010000424D7601000000000000760000002800000020000000100000000100\r
+      04000000000000010000120B0000120B00001000000000000000000000000000\r
+      800000800000008080008000000080008000808000007F7F7F00BFBFBF000000\r
+      FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333\r
+      333333FFFFFFFFFFFFF33000077777770033377777777777773F000007888888\r
+      00037F3337F3FF37F37F00000780088800037F3337F77F37F37F000007800888\r
+      00037F3337F77FF7F37F00000788888800037F3337777777337F000000000000\r
+      00037F3FFFFFFFFFFF7F00000000000000037F77777777777F7F000FFFFFFFFF\r
+      00037F7F333333337F7F000FFFFFFFFF00037F7F333333337F7F000FFFFFFFFF\r
+      00037F7F333333337F7F000FFFFFFFFF00037F7F333333337F7F000FFFFFFFFF\r
+      00037F7F333333337F7F000FFFFFFFFF07037F7F33333333777F000FFFFFFFFF\r
+      0003737FFFFFFFFF7F7330099999999900333777777777777733}\r
+    NumGlyphs = 2\r
+    OnClick = btnOutputFileDialogClick\r
+  end\r
+  object comboInput: TComboBox\r
+    Left = 64\r
+    Top = 37\r
+    Width = 300\r
+    Height = 21\r
+    Style = csDropDownList\r
+    ItemHeight = 13\r
+    TabOrder = 1\r
+  end\r
+  object eInput: TEdit\r
+    Left = 64\r
+    Top = 13\r
+    Width = 273\r
+    Height = 21\r
+    TabOrder = 0\r
+  end\r
+  object eOutput: TEdit\r
+    Left = 64\r
+    Top = 93\r
+    Width = 273\r
+    Height = 21\r
+    TabOrder = 2\r
+  end\r
+  object comboOutput: TComboBox\r
+    Left = 64\r
+    Top = 69\r
+    Width = 300\r
+    Height = 21\r
+    Style = csDropDownList\r
+    ItemHeight = 13\r
+    TabOrder = 3\r
+  end\r
+  object btnProcess: TButton\r
+    Left = 232\r
+    Top = 141\r
+    Width = 132\r
+    Height = 25\r
+    Caption = '&Process'\r
+    TabOrder = 5\r
+    OnClick = btnProcessClick\r
+  end\r
+  object cbIgnoreShort: TCheckBox\r
+    Left = 64\r
+    Top = 145\r
+    Width = 121\r
+    Height = 17\r
+    Caption = 'Ignore "short" names'\r
+    TabOrder = 4\r
+  end\r
+  object btnExit: TButton\r
+    Left = 319\r
+    Top = 184\r
+    Width = 45\r
+    Height = 25\r
+    Caption = 'E&xit'\r
+    TabOrder = 6\r
+    OnClick = btnExitClick\r
+  end\r
+  object btnAbout: TButton\r
+    Left = 64\r
+    Top = 184\r
+    Width = 45\r
+    Height = 25\r
+    Caption = '&About'\r
+    TabOrder = 7\r
+    OnClick = btnAboutClick\r
+  end\r
+  object btnIntro: TButton\r
+    Left = 149\r
+    Top = 184\r
+    Width = 45\r
+    Height = 25\r
+    Caption = '&Intro'\r
+    TabOrder = 8\r
+    OnClick = btnIntroClick\r
+  end\r
+  object btnUseDefaultOutput: TButton\r
+    Left = 64\r
+    Top = 117\r
+    Width = 114\r
+    Height = 19\r
+    Caption = '&Use Default Filename'\r
+    TabOrder = 9\r
+    OnClick = btnUseDefaultOutputClick\r
+  end\r
+  object btnHowTo: TButton\r
+    Left = 234\r
+    Top = 184\r
+    Width = 48\r
+    Height = 25\r
+    Caption = '&How to...'\r
+    TabOrder = 10\r
+    OnClick = btnHowToClick\r
+  end\r
+  object dlgOpenInput: TOpenDialog\r
+    Options = [ofEnableSizing]\r
+    Left = 363\r
+    Top = 9\r
+  end\r
+  object dlgSaveOutput: TSaveDialog\r
+    Left = 363\r
+    Top = 88\r
+  end\r
+  object TimerLoadFormats: TTimer\r
+    OnTimer = TimerLoadFormatsTimer\r
+    Left = 350\r
+    Top = 229\r
+  end\r
+end\r
diff --git a/gpsbabel/win32/gui/GPSBabelGUIDialogU.pas b/gpsbabel/win32/gui/GPSBabelGUIDialogU.pas
new file mode 100644 (file)
index 0000000..d7b73e0
--- /dev/null
@@ -0,0 +1,480 @@
+{\r
+  Copyright © Richard L Messeder, Down East Engineering, www.DownEastEngineering.com and others listed below\r
+  Delphi 5, 6 & 7 Version\r
+  v02.00.00 Add About.\r
+  v02.00.00 Add Exit button.\r
+  v02.00.00 Add Help.\r
+  v02.00.00 Add hotkeys for most common buttons.\r
+  v02.00.00 Add timer to load formats after form is created.\r
+  v02.00.00 Align controls on dialog.\r
+  v02.00.00 Don't permit file processing unless GPSBabel is OK.\r
+  v02.00.00 Evaluate need for memoStdErr vs. Message dialog.\r
+  v02.00.00 Include all project management and Delphi project files in upload.\r
+  v02.00.00 LoadFormatsFromGPSBabelExe: Delete unused AllocConsole.\r
+  v02.00.00 LoadFormatsFromGPSBabelExe: don't continue if GPSBabel not found.\r
+  v02.00.00 Look for GPSBabel.exe before attempting to open it.\r
+  v02.00.00 Modify to use input filename and output type to generate default output filename.\r
+  v02.00.00 Output file dialog: fill in filename and filetype, if possible.\r
+  v02.00.00 Port to Delphi 7.\r
+  v02.00.00 Process: Delete unused AllocConsole.\r
+  v02.00.00 Process: handle cases where input/output file is a dir.\r
+  v02.00.00 Process: don't allow processing null, or undefined, files.\r
+  v02.00.00 Remove unused console invocations.\r
+  v02.00.00 Remove unused variable declarations.\r
+  v02.00.00 Rewrite to eliminate 'exit;'.\r
+  v02.00.00 Sort default file types by alpha; add sort routine: CANCELLED: placed in GPSBabel.\r
+}\r
+{\r
+    Copyright (C) 2002 Josh M. McKee, mrsnazz@users.sourceforge.net\r
+\r
+    This program is free software; you can redistribute it and/or modify\r
+    it under the terms of the GNU General Public License as published by\r
+    the Free Software Foundation; either version 2 of the License, or\r
+    (at your option) any later version.\r
+\r
+    This program is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+    GNU General Public License for more details.\r
+\r
+    You should have received a copy of the GNU General Public License\r
+    along with this program; if not, write to the Free Software\r
+    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA\r
+}\r
+\r
+{\r
+    1.0.2   JMc   - Added LoadFormats to call the new -^ switch, to dynamically\r
+                    load the supported GPSDataFormats from gpsbabel.exe.\r
+    1.0.1   JMc   - Switched to using AddFormat for populating the GPSDataFormats table\r
+                  - Updated GPSDataFormats table to include currently supported GPSDataFormats\r
+                  - Switched to using CreateProcess rather than WinExec, so that\r
+                    we can display data from stderr to the user.\r
+    1.0.0   JMc   First release\r
+}\r
+\r
+unit GPSBabelGUIDialogU;\r
+\r
+interface\r
+\r
+uses\r
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,\r
+  Buttons, ExtCtrls, StdCtrls, StrUtils;\r
+\r
+const\r
+  CR  = chr ($0D);\r
+  LF  = chr ($0A);\r
+  Tab = chr ($09);\r
+\r
+type\r
+  TGPSDataFormat = record\r
+    sType: string; // type to be passed to GPSBabel\r
+    sExt: string;  // default file extension\r
+    sDesc: string; // description of format\r
+  end;\r
+\r
+  TGPSBabelGUIDialog = class (TForm)\r
+    private // invisible outside of the unit\r
+      OKtoRun: boolean;\r
+      BytesRead: DWord;\r
+      Buffer: array [0..4095] of char;\r
+      BufferIndex, TokenIndex, nFormats: integer;\r
+      sCmd, sGPSBabelMsg, sIgnoreShort: string;\r
+      Tokens: array [0..2] of string;\r
+      GPSDataFormats: array of TGPSDataFormat;\r
+      hRead, hWrite: THandle;\r
+      ProcessInfo: TProcessInformation;\r
+      SecurityAttr: TSecurityAttributes;\r
+      StartupInfo: TStartupInfo;\r
+      procedure LoadFormatsFromGPSBabelExe;\r
+      procedure PopulateCombos;\r
+      procedure PopulateDialogs;\r
+    protected // visible in the unit and in descended classes\r
+    public // visible wherever the class can be referenced\r
+    published // like public, but generates RTTI info\r
+      btnAbout: TButton;\r
+      btnExit: TButton;\r
+      btnHowTo: TButton;\r
+      btnInputFileDialog: TSpeedButton;\r
+      btnIntro: TButton;\r
+      btnOutputFileDialog: TSpeedButton;\r
+      btnProcess: TButton;\r
+      btnUseDefaultOutput: TButton;\r
+      bvlGPSBabelURI: TBevel;\r
+      cbIgnoreShort: TCheckBox;\r
+      comboInput: TComboBox;\r
+      comboOutput: TComboBox;\r
+      dlgOpenInput: TOpenDialog;\r
+      dlgSaveOutput: TSaveDialog;\r
+      eInput: TEdit;\r
+      eOutput: TEdit;\r
+      lblGPSBabelURI: TLabel;\r
+      lblInputFileName: TLabel;\r
+      lblInputFormat: TLabel;\r
+      lblOutputFileName: TLabel;\r
+      lblOutputFormat: TLabel;\r
+      TimerLoadFormats: TTimer;\r
+\r
+      procedure TimerLoadFormatsTimer(Sender: TObject);\r
+      procedure btnAboutClick(Sender: TObject);\r
+      procedure btnExitClick(Sender: TObject);\r
+      procedure btnHowToClick(Sender: TObject);\r
+      procedure btnInputFileDialogClick (Sender: TObject);\r
+      procedure btnIntroClick(Sender: TObject);\r
+      procedure btnOutputFileDialogClick (Sender: TObject);\r
+      procedure btnProcessClick (Sender: TObject);\r
+      procedure btnUseDefaultOutputClick(Sender: TObject);\r
+    end;\r
+\r
+var\r
+  GPSBabelGUIDialog: TGPSBabelGUIDialog;\r
+\r
+implementation\r
+\r
+uses AboutDialogU;\r
+\r
+{$R *.dfm}\r
+\r
+procedure TGPSBabelGUIDialog.TimerLoadFormatsTimer (Sender: TObject);\r
+// This could have been in FormCreate, but this way the form is shown\r
+// before the 'formats loaded' message.\r
+begin\r
+  TimerLoadFormats.Enabled := false;\r
+  nFormats := 0;\r
+  LoadFormatsFromGPSBabelExe;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.LoadFormatsFromGPSBabelExe;\r
+  procedure AddFormat (sType, sExt, sDesc: string);\r
+  begin\r
+    inc (nFormats);\r
+    // changes the size of the GPSDataFormats array\r
+    // initialized at nil, so the first pass sets it to 1 row, addressed as [0]\r
+    SetLength (GPSDataFormats, nFormats);\r
+\r
+    GPSDataFormats [nFormats-1].sType := sType; // [n-1] because array is zero-based\r
+    GPSDataFormats [nFormats-1].sExt := sExt;\r
+    GPSDataFormats [nFormats-1].sDesc := sDesc;\r
+  end;\r
+\r
+begin\r
+  sCmd := 'GPSBabel -^'; // internal gpsbabel command -^\r
+\r
+  SecurityAttr.nLength := sizeof (TSECURITYATTRIBUTES);\r
+  SecurityAttr.bInheritHandle := true;\r
+  SecurityAttr.lpSecurityDescriptor := nil;\r
+\r
+  OKtoRun := false;\r
+  if CreatePipe (hRead, hWrite, @SecurityAttr, 0) then begin\r
+    FillChar (StartupInfo, Sizeof (StartupInfo), #0);\r
+    StartupInfo.cb := Sizeof (StartupInfo);\r
+    StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;\r
+    StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;\r
+    StartupInfo.hStdInput := GetStdHandle (STD_INPUT_HANDLE);\r
+    StartupInfo.hStdOutput:= hWrite;\r
+    StartupInfo.hStdError := hWrite;\r
+\r
+    if FileExists ('GPSBabel.exe') then begin\r
+      if CreateProcess (\r
+        nil,                // lpApplicationName    // pointer to name of executable module\r
+        // sCmd includes both the exec name and the command line parms in this call\r
+        pchar (sCmd),       // lpCommandLine,       // pointer to command line string\r
+        nil,                // lpProcessAttributes, // pointer to process security attributes\r
+        nil,                // lpThreadAttributes,  // pointer to thread security attributes\r
+        true,               // bInheritHandles,     // handle inheritance flag\r
+        CREATE_NEW_CONSOLE, // dwCreationFlags,     // creation flags\r
+        nil,                // lpEnvironment,       // pointer to new environment block\r
+        nil,                // lpCurrentDirectory,  // pointer to current directory name\r
+        StartupInfo,        // lpStartupInfo,       // pointer to STARTUPINFO\r
+        ProcessInfo)        // lpProcessInformation // pointer to PROCESS_INFORMATION\r
+        then begin\r
+\r
+        while (WaitforSingleObject (ProcessInfo.hProcess, 0)) <> WAIT_OBJECT_0 do;\r
+\r
+        PeekNamedPipe (hRead, nil, 0, nil, @BytesRead, nil);\r
+        ReadFile (hRead, Buffer, 4096, BytesRead, nil);\r
+        // The data passed by GPSBabel.exe should exceed 1500 bytes, but this provides some slack.\r
+        // (v2.0.0) We're discussing the possibility of having some sort of byte count passed by gpsbabel,\r
+        // e.g., 'byte count=1234'; we could then check for 'byte count=', and if we don't get it\r
+        // then we know that there is an error.\r
+        if BytesRead > 1000 then begin\r
+          BufferIndex := 0;\r
+          TokenIndex := 0;\r
+          FillChar (Tokens, SizeOf(Tokens), 0);\r
+\r
+          // Process the buffer into Types, Extensions, and Descriptions\r
+          while BufferIndex < BytesRead do begin\r
+            if Buffer [BufferIndex] in [Tab,CR,LF] then // Tab between fields, CRLF between rows\r
+              inc (TokenIndex)\r
+            else\r
+              Tokens [TokenIndex] := Tokens [TokenIndex] + Buffer [BufferIndex];\r
+            if TokenIndex = 3 then begin\r
+              TokenIndex := 0;\r
+              inc (BufferIndex); // Because we point to CR and must skip the LF\r
+              AddFormat (Tokens[0], Tokens[1], Tokens[2]);\r
+              FillChar(Tokens, SizeOf (Tokens), 0);\r
+            end;\r
+            inc (BufferIndex);\r
+          end;\r
+\r
+          PopulateCombos;\r
+          PopulateDialogs;\r
+          OKtoRun := true;\r
+          MessageDlg ('GPS file formats loaded from GPSBabel.exe.', mtInformation, [mbOk], 0);\r
+        end // if BytesRead > 0\r
+        else begin\r
+          sGPSBabelMsg :=  copy (Buffer, 1, BytesRead);\r
+          MessageBox (0, pchar (sGPSBabelMsg),'GPSBabel Error', MB_OK);\r
+        end\r
+      end\r
+      else\r
+        MessageDlg ('Unable to execute GPSBabel.exe.', mtError, [mbOk], 0);\r
+    end\r
+    else\r
+      MessageDlg ('Can''t find GPSBabel.exe.', mtError, [mbOk], 0);\r
+\r
+    CloseHandle (hRead);\r
+    CloseHandle (hWrite);\r
+  end\r
+  else\r
+    MessageDlg ('Unable to create pipe!', mtError, [mbOk], 0);\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.PopulateCombos;\r
+var\r
+  i: integer;\r
+begin\r
+  for i:=0 to nFormats-1 do begin\r
+    comboInput.items.add (GPSDataFormats[i].sDesc);\r
+    comboOutput.items.add (GPSDataFormats[i].sDesc);\r
+  end;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.PopulateDialogs;\r
+var\r
+  i: integer;\r
+begin\r
+  dlgOpenInput.Filter := '';\r
+  dlgSaveOutput.Filter := '';\r
+  for i:=0 to nFormats-1 do begin\r
+    if (GPSDataFormats[i].sExt<>'') then begin\r
+      dlgOpenInput.Filter := dlgOpenInput.Filter +\r
+        GPSDataFormats[i].sDesc + ' (*.' +\r
+        GPSDataFormats[i].sExt + ')|*.' +\r
+        uppercase (GPSDataFormats[i].sExt) + '|';\r
+\r
+      dlgSaveOutput.Filter := dlgSaveOutput.Filter +\r
+        GPSDataFormats[i].sDesc + ' (*.' +\r
+        GPSDataFormats[i].sExt + ')|*.' +\r
+        uppercase (GPSDataFormats[i].sExt) + '|';\r
+    end;\r
+  end;\r
+\r
+  dlgOpenInput.Filter := dlgOpenInput.Filter + 'All files (*.*)|*.*';\r
+  dlgSaveOutput.Filter := dlgSaveOutput.Filter + 'All files (*.*)|*.*';\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnAboutClick(Sender: TObject);\r
+begin\r
+  if AboutBox = nil then begin\r
+    Application.CreateForm (TAboutBox, AboutBox);\r
+    AboutBox.Left := (Screen.Width - AboutBox.Width) div 2;\r
+    AboutBox.Top := (Screen.Height - AboutBox.Height) div 2;\r
+  end;\r
+  AboutBox.Show;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnExitClick (Sender: TObject);\r
+begin\r
+  Application.Terminate;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnHowToClick(Sender: TObject);\r
+begin\r
+  MessageBox (0, PChar (\r
+    'Begin using GPSBabelGUI by:' +CR+\r
+    '    Defining an input file. If the file has an extension that' +CR+\r
+    '    GPSBabelGUI recognizes, the format will be automatically' +CR+\r
+    '    selected.' +CR+CR+\r
+    '    If the selected input file format is not correct, select the correct' +CR+\r
+    '    format from the Format dropdown list.' +CR+CR+\r
+    '    Select an output format.' +CR+CR+\r
+    '    Select Use Default Filename.' +CR+CR+\r
+    '        GPSBabelGUI will fill in the default output directory/filename' +CR+\r
+    '        using the input directory and filename. To change it, edit the' +CR+\r
+    '        name directly or use the Save As dialog.' +CR+CR+\r
+    '    Select any options for GPSBabel to use during processing.' +CR+CR+\r
+    '    Select Process.'\r
+  ), 'How To...', MB_OK);\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnInputFileDialogClick (Sender: TObject);\r
+var\r
+  sExt: string;\r
+  i: integer;\r
+begin\r
+  if OKtoRun then\r
+    if dlgOpenInput.Execute then begin\r
+      eInput.Text := dlgOpenInput.filename;\r
+      sExt := uppercase (ExtractFileExt (eInput.text));\r
+      for i := 0 to nFormats-1 do\r
+        if '.' + uppercase (GPSDataFormats[i].sExt) = sExt then\r
+          comboInput.ItemIndex := i;\r
+    end;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnIntroClick(Sender: TObject);\r
+begin\r
+  MessageBox (0, PChar (\r
+    'GPSBabelGUI is simply a GUI front end for GPSBabel.exe.' +CR+CR+\r
+    'GPSBabelGUI''s only purpose is to make it easier to call' +CR+\r
+    'GPSBabel.exe, so it must be able to find it. The easiest' +CR+\r
+    'way for GPSBabelGUI to find GPSBable.exe is for both of' +CR+\r
+    'them to be in the same directory.' +CR+CR+\r
+    'GPSBabelGUI will not permit any processing to take place' +CR+\r
+    'if there is an error during startup, or if it cannot find' +CR+\r
+    'GPSBabel.exe.' +CR+CR+\r
+    'There are 3 classes of messages to expect:' +CR+Tab+\r
+      '°Errors' +CR+Tab+\r
+      '°Warnings' +CR+Tab+\r
+      '°Information' +CR+CR+\r
+    '°If you receive an Error, such as ''GPSBabel can''t be found'',' +CR+\r
+    'something has gone seriously amiss and must be corrected' +CR+\r
+    'before trying to run GPSBabelGUI again.' +CR+CR+\r
+    '°Warnings simply indicate that you are trying to do something' +CR+\r
+    'out of order, such as attempting to Process before defining' +CR+\r
+    'an input or output file.' +CR+CR+\r
+    '°Information dialogs provide you with useful information, such' +CR+\r
+    'as letting you know that a conversion has completed.' +CR+CR+\r
+    'The About box displays copyright information for several seconds.'\r
+  ), 'Introduction', MB_OK);\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnOutputFileDialogClick (Sender: TObject);\r
+var\r
+  sExt: string;\r
+  i: integer;\r
+begin\r
+  if OKtoRun then begin\r
+    dlgSaveOutput.filename := eOutput.Text;\r
+    if dlgSaveOutput.Execute then begin\r
+      eOutput.Text := dlgSaveOutput.filename;\r
+      sExt := uppercase (ExtractFileExt (eOutput.text));\r
+      for i := 0 to nFormats-1 do\r
+        if '.' + uppercase (GPSDataFormats[i].sExt) = sExt then\r
+          comboOutput.ItemIndex := i;\r
+    end;\r
+  end;\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnProcessClick (Sender: TObject);\r
+var\r
+  f: file;\r
+begin\r
+  if OKtoRun then begin\r
+    if eInput.text <> '' then begin\r
+      if FileExists (eInput.text) then begin\r
+        if (comboInput.ItemIndex) > -1 then begin // Input type is selected\r
+          if ((eOutput.text <> '') and (not DirectoryExists (eOutput.text))) then begin\r
+            // The output file must exist, or else ExtractShortPathName will not function\r
+            if not FileExists (eOutput.text) then begin\r
+              system.assign (f, eOutput.text);\r
+              system.rewrite (f);\r
+              system.close (f);\r
+            end;\r
+\r
+            if (comboOutput.ItemIndex) > -1 then begin // Output type is selected\r
+              if cbIgnoreShort.checked then\r
+                sIgnoreShort := '-s'\r
+              else\r
+                sIgnoreShort := '';\r
+\r
+              // Construct the command line to execute gpsbabel.exe. ExtractShortPathName\r
+              // is used to reduce any "long" file/directory names in the paths down to\r
+              // 8.3 dos format names (this removes spaces, etc).\r
+              sCmd := 'GPSBabel '+sIgnoreShort // +'-i garmin -f usb:' // for testing\r
+                +' -i ' + GPSDataFormats [comboInput.ItemIndex].sType\r
+                +' -f ' + ExtractShortPathName (eInput.text)\r
+                +' -o ' + GPSDataFormats [comboOutput.ItemIndex].sType\r
+                +' -F ' + ExtractShortPathName (eOutput.text);\r
+\r
+              SecurityAttr.nLength := sizeof (TSECURITYATTRIBUTES);\r
+              SecurityAttr.bInheritHandle := true;\r
+              SecurityAttr.lpSecurityDescriptor := nil;\r
+\r
+              if CreatePipe (hRead, hWrite, @SecurityAttr, 0) then begin\r
+                FillChar (StartupInfo, Sizeof (StartupInfo), 0);\r
+                StartupInfo.cb := Sizeof (StartupInfo);\r
+                StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;\r
+                StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;\r
+                StartupInfo.hStdInput := GetStdHandle (STD_INPUT_HANDLE);\r
+                StartupInfo.hStdOutput:= hWrite;\r
+                StartupInfo.hStdError := hWrite;\r
+\r
+                if CreateProcess (\r
+                  nil,                // lpApplicationName    // pointer to name of executable module\r
+                  // sCmd includes both the exec name and the command line parms in this call\r
+                  pchar (sCmd),       // lpCommandLine,       // pointer to command line string\r
+                  nil,                // lpProcessAttributes, // pointer to process security attributes\r
+                  nil,                // lpThreadAttributes,  // pointer to thread security attributes\r
+                  true,               // bInheritHandles,     // handle inheritance flag\r
+                  CREATE_NEW_CONSOLE, // dwCreationFlags,     // creation flags\r
+                  nil,                // lpEnvironment,       // pointer to new environment block\r
+                  nil,                // lpCurrentDirectory,  // pointer to current directory name\r
+                  StartupInfo,        // lpStartupInfo,       // pointer to STARTUPINFO\r
+                  ProcessInfo)        // lpProcessInformation // pointer to PROCESS_INFORMATION\r
+                  then begin\r
+\r
+                  while (WaitForSingleObject (ProcessInfo.hProcess, 0)) <> WAIT_OBJECT_0 do;\r
+\r
+                  PeekNamedPipe (hRead, nil, 0, nil, @BytesRead, nil);\r
+                  if BytesRead > 0 then begin // pipe not empty\r
+                    ReadFile (hRead, Buffer, 4096, BytesRead, nil);\r
+                    sGPSBabelMsg :=  copy (Buffer, 1, BytesRead);\r
+                    MessageBox (0, pchar (sGPSBabelMsg),'Attention! Message from GPSBabel', MB_OK);\r
+                  end\r
+                  else // pipe is empty\r
+                    MessageDlg ('File conversion complete.', mtInformation, [mbOk], 0);\r
+                end\r
+                else\r
+                  MessageDlg ('Unable to execute GPSBabel.exe.', mtError, [mbOk], 0);\r
+\r
+                CloseHandle (hRead);\r
+                CloseHandle (hWrite);\r
+              end\r
+              else\r
+                MessageDlg ('Unable to create pipe!', mtError, [mbOk], 0);\r
+            end\r
+            else\r
+              MessageDlg ('You must select the output file format.', mtWarning, [mbOk], 0);\r
+          end\r
+          else\r
+            MessageDlg ('Output file is not defined.', mtWarning, [mbOk], 0);\r
+        end\r
+        else\r
+          MessageDlg ('You must select the input file format.', mtWarning, [mbOk], 0);\r
+      end\r
+      else\r
+        MessageDlg ('Input file was not found.', mtWarning, [mbOk], 0);\r
+    end\r
+    else\r
+      MessageDlg ('Input file is not defined.', mtWarning, [mbOk], 0);\r
+  end\r
+  else\r
+    MessageDlg ('Can''t run.', mtError, [mbOk], 0);\r
+end;\r
+\r
+procedure TGPSBabelGUIDialog.btnUseDefaultOutputClick(Sender: TObject);\r
+begin\r
+  if eInput.text <> '' then begin\r
+    if (comboOutput.ItemIndex)> -1 then // Output type is selected\r
+      eOutput.text := LeftStr (eInput.text, AnsiPos (ExtractFileExt (eInput.text), eInput.text)) +\r
+                      GPSDataFormats [comboOutput.ItemIndex].sExt\r
+    else\r
+      MessageDlg ('You must select the output file format.', mtWarning, [mbOk], 0);\r
+  end\r
+  else\r
+    MessageDlg ('Input file is not defined.', mtWarning, [mbOk], 0);\r
+end;\r
+\r
+initialization\r
+end.\r
diff --git a/gpsbabel/win32/gui/README.txt b/gpsbabel/win32/gui/README.txt
new file mode 100644 (file)
index 0000000..e7f3ff3
--- /dev/null
@@ -0,0 +1,4 @@
+This is a Windows (95/98/NT4/2K/XP) front-end for GPSBabel.\r
+It is a stand-alone program in that it doesn't install any other files or change the registry.\r
+It must able to find GPSBabel; the best place for it is in the same directory as GPSBabel.\r
+Further help is available in GPSBabelGUI.\r
diff --git a/gpsbabel/win32/gui/VersionInfo.pas b/gpsbabel/win32/gui/VersionInfo.pas
new file mode 100644 (file)
index 0000000..683a135
--- /dev/null
@@ -0,0 +1,99 @@
+unit VersionInfo;\r
+\r
+interface\r
+\r
+uses\r
+       SysUtils, Windows;\r
+\r
+const\r
+       vsComments          = 'Comments';\r
+       vsCompanyName       = 'CompanyName';\r
+       vsFileDescription   = 'FileDescription';\r
+       vsFileVersion       = 'FileVersion';\r
+       vsInternalName      = 'InternalName';\r
+       vsLegalCopyright    = 'LegalCopyright';\r
+       vsLegalTrademarks   = 'LegalTrademarks';\r
+       vsOriginalFilename  = 'OriginalFilename';\r
+       vsPrivateBuild      = 'PrivateBuild';\r
+       vsProductName       = 'ProductName';\r
+       vsProductVersion    = 'ProductVersion';\r
+       vsSpecialBuild      = 'SpecialBuild';\r
+\r
+type\r
+       TFileInfo = (TFileVersion, TFileVersionLong, TProductVersion, TProductVersionLong);\r
+\r
+function GetVersionString (const vsKey: string): string;\r
+function GetFileVersion (const fInfo: TFileInfo): string;\r
+\r
+implementation\r
+\r
+var\r
+       VerInfoPresent: Boolean; // True if "pVersionBuffer" contains valid information\r
+       pVersionBuffer: Pointer; // The file information is stored in this location\r
+\r
+function SwapLong (L: LongInt): LongInt; assembler;\r
+asm\r
+       rol eax, 16;\r
+end;\r
+\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+// ex: GetVersionString (vsCompanyName); returns "Down East Engineering"\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+function GetVersionString (const vsKey: string): string;\r
+var\r
+       KeyPath: array [0..255] of char;\r
+       p: pointer;\r
+       Len: cardinal;\r
+begin\r
+       Result := '';\r
+       if VerInfoPresent then\r
+               if VerQueryValue (pVersionBuffer, '\VarFileInfo\Translation', p, Len) then begin\r
+                       StrLFmt (KeyPath, 255, '\StringFileInfo\%.8x\%s', [SwapLong (LongInt (p^)), vsKey]);\r
+                       if VerQueryValue (pVersionBuffer, KeyPath, p, Len) then\r
+                               Result := strPas (PChar (p));\r
+               end;\r
+end;\r
+\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+// GetFileVersion (TFileVersionLong); returns "1.0.0.0"\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+function GetFileVersion (const fInfo: TFileInfo): string;\r
+var\r
+       Len: cardinal;\r
+       pVerInfo: PVSFixedFileInfo;\r
+begin\r
+       Result := '';\r
+       if VerInfoPresent then\r
+               if VerQueryValue (pVersionBuffer, '\', Pointer (pVerInfo), Len) then\r
+                       case fInfo of\r
+                               TFileVersion:\r
+                                       with pVerInfo^ do\r
+                                               Result := Format('%d.%d',\r
+                                                       [dwFileVersionMS shr 16, dwFileVersionMS and $FFFF]);\r
+                               TFileVersionLong:\r
+                                       with pVerInfo^ do\r
+                                               Result := Format('%d.%d.%d.%d',\r
+                                                       [dwFileVersionMS shr 16, dwFileVersionMS and $FFFF,\r
+                                                        dwFileVersionLS shr 16, dwFileVersionLS and $FFFF]);\r
+                       end;\r
+end;\r
+\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+// Here is where the information is actually read from the EXE file.\r
+// Data is read once, when the unit is initialized, and stored in 'pVersionBuffer'\r
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\r
+var\r
+       fname: array [0..MAX_PATH] of char;\r
+       bufsize: integer;\r
+       pVersionHandle: cardinal;\r
+\r
+initialization\r
+  StrPLCopy (fname, ParamStr(0), MAX_PATH); // fully qualified Application.ExeName\r
+  bufsize := GetFileVersionInfoSize (fname, pVersionHandle);\r
+  GetMem (pVersionBuffer, bufsize);\r
+  VerInfoPresent := (bufsize > 0) and GetFileVersionInfo (fname, 0, bufsize, pVersionBuffer);\r
+\r
+finalization\r
+  FreeMem (pVersionBuffer, bufsize);\r
+end.\r
+\r
diff --git a/gpsbabel/win32/gui/filelist.txt b/gpsbabel/win32/gui/filelist.txt
new file mode 100644 (file)
index 0000000..4405fa4
--- /dev/null
@@ -0,0 +1,17 @@
+AboutDialogU.ddp\r
+AboutDialogU.dfm\r
+AboutDialogU.pas\r
+filelist.txt\r
+GPSBabel Windows GUI 2.00.00 Project Plan.pdf\r
+GPSBabelGUI.cfg\r
+GPSBabelGUI.dof\r
+GPSBabelGUI.dpr\r
+GPSBabelGUI.exe\r
+GPSBabelGUI.ico\r
+GPSBabelGUI.res\r
+GPSBabelGUI.todo\r
+GPSBabelGUIDialogU.ddp\r
+GPSBabelGUIDialogU.dfm\r
+GPSBabelGUIDialogU.pas\r
+README.txt\r
+VersionInfo.pas\r